; } }
class Test { Outer.Inner1 inner1 = new Outer.Inner1(); //Test and Outer are in the same package, so Inner2 can be accessed here Outer.Inner2 inner2 = new Outer.Inner2(); //Compile error: Inner3 cannot be accessed here //Outer.Inner3 inner3 = new Outer.Inner3(); } 1.1 静态成员类特性
静态成员类可访问外部类的任一静态字段或静态方法
像静态方法或静态字段一样,静态成员类有public/private/default权限修饰符 1.2 静态成员类约束
静态成员类不能与外部类重名
像外部类的静态方法一样,不能直接访问外部类的实例字段和实例方法
静态成员类只能定义于外部类的顶层代码或外部类其它静态成员类的顶层代码中(嵌套定义);不能定义于外部类的某个函数中。 1.3 新增语法 如示例代码所示,可以以“OuterClass.InnerClass”的方式来引用某个内部类。 1.4 什么时候使用静态成员类 B为A的辅助类,且只为A所用时,可将B定义为A的静态成员类。例如JDK中的LinkedList类就有Entry静态成员类: public class LinkedList<E> extends AbstractSequentialList<E> …; private static class Entry<E> { E element; Entry<E> next; Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) { this.element = element; this.next = next; this.previous = previous; } } …; }
显然,Entry用来表示LinkedList中的一个结点,只被LinkedList自身使用。
2 Member class(成员类) 一个静态成员类,若去掉“static”关键字,就成为成员类。如下示例代码,Inner1/Inner2/Inner3/Inner4就是Outer的四个成员类 public class Outer { //just like instance method, member class has public/private/default access privilege levels private int data; //access privilege level: public public class Inner1 { private int data; private int data1; public Inner1() { //member class can access its outer class' instance field directly data1 = 1上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
|