Java 内部类

Java 内部类

在J ava 中,也可以嵌套类(类中的类)。嵌套类的目的是将属于一起的类分组,这使代码更具可读性和可维护性。

要访问内部类,请创建外部类的对象,然后创建内部类的对象:

实例
  1. class OuterClass {
  2. int x = 10;
  3. class InnerClass {
  4. int y = 5;
  5. }
  6. }
  7. public class Main {
  8. public static void main(String[] args) {
  9. OuterClass myOuter = new OuterClass();
  10. OuterClass.InnerClass myInner = myOuter.new InnerClass();
  11. System.out.println(myInner.y + myOuter.x);
  12. }
  13. }

私有内部类

与 "常规" 类不同,内部类可以是 private 私有的,也可以是 protected 受保护的。如果不希望外部对象访问内部类,请将该类声明为 private:

实例
  1. class OuterClass {
  2. int x = 10;
  3. private class InnerClass {
  4. int y = 5;
  5. }
  6. }
  7. public class Main {
  8. public static void main(String[] args) {
  9. OuterClass myOuter = new OuterClass();
  10. OuterClass.InnerClass myInner = myOuter.new InnerClass();
  11. System.out.println(myInner.y + myOuter.x);
  12. }
  13. }

如果试图从外部类访问私有内部类,则会发生错误:

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();

静态内部类

内部类也可以是 static 静态的,这意味着您可以在不创建外部类的对象的情况下访问它:

实例
  1. class OuterClass {
  2. int x = 10;
  3. static class InnerClass {
  4. int y = 5;
  5. }
  6. }
  7. public class Main {
  8. public static void main(String[] args) {
  9. OuterClass.InnerClass myInner = new OuterClass.InnerClass();
  10. System.out.println(myInner.y);
  11. }
  12. }
注意:与 static 静态属性和方法一样,static 静态内部类无权访问外部类的成员。

从内部类访问外部类

内部类的一个优点是,它们可以访问外部类的属性和方法:

实例
  1. class OuterClass {
  2. int x = 10;
  3. class InnerClass {
  4. public int myInnerMethod() {
  5. return x;
  6. }
  7. }
  8. }
  9. public class Main {
  10. public static void main(String[] args) {
  11. OuterClass myOuter = new OuterClass();
  12. OuterClass.InnerClass myInner = myOuter.new InnerClass();
  13. System.out.println(myInner.myInnerMethod());
  14. }
  15. }