java 创建内部类时离不开他的外围类,除非内部类是嵌套类(即静态内部类),嵌套类中的内部类也是如此 比如:
public class TestStaticiInnerClass {
? ? private static class InnerA{
? ? ? ? public void f(){
? ? ? ? ? ? System.out.println("this is static inner class method");
? ? ? ? }
? ? ? ? public class InnerB{
? ? ? ? ? ? public void g(){
? ? ? ? ? ? ? ? System.out.println("this is InnerB mehtod");
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? public static void main(String[] args) {
? ? ? ? InnerA a = new InnerA();
? ? ? ? a.f();
? ? ? ? InnerA.InnerB b = a.new InnerB();
? ? ? ?b.g();
? ? }
}
1)调用f()方法:
首先InnerA是一个嵌套类(静态内部类) ?该嵌套类中有一个内部类InnerB,
由于InnerA是嵌套类 所以调用它里面的非静态方法f()时 需要创建InnerA对象 除非方法f()是静态的
而无需它的外围类TestStaticiInnerClass对象。
2) 调用g()方法:
由于g()方法属于InnerB 而InnerB不是嵌套类,所以调用g()方法需要首先创建InnerB对象
上面说了 InnerB不是嵌套类 而是普通内部类,要创建它的对象必须要知道它的所属外围类?
即:外围类.内部类 ?引用 = 外围类引用.new 内部类();
另外:普通的内部类中是不能有静态数据和字段的 这点在编译期间就能发现。