1、java view plain copypackage javaLearing.InnerClass;public class Outer public String str1 = str1; protected String str2 = str2 private String str3 = str3 private static String str4 = str4 private void print() System.out.println(Outer str1: + str1);Outer str2: + str2);Outer str3: + str3);Outer str4: +
2、 str4); public Inner getInnerInstance() return new Inner(); public class Inner public String str3 = Inner str3 private String str4 = Inner Str4 public void print() Inner class print); Outer.this.print();Outer: + Outer.this);Outer str3 actual should be: + Outer.this.str3);Outer static str4 actual sho
3、uld be: + Outer.str4); public static void main(String args) Outer o = new Outer(); Outer.Inner i2 = o.getInnerInstance(); i.print(); i2.print(); 结果:Inner class print str1 str2 Inner str3 Inner Str4 str3 str4 javaLearing.InnerClass.Outer15db9742 注意: 成员内部类不能含有static 的变量和方法。反编译看看:看内部类的购造函数,就了解为什么可以访问外部
4、类的成员变量了。2. 静态内部类 用static 修饰的内部类。 只能访问外部类的静态成员变量和方法。所以也不能通过this 来访问外部类的实例成员变量和方法。public class Outer2 public static String str1 = public static String str2 = private static void print() public static class Inner private String str1 = Inner str1 + Outer2.str1);Inner str1: Outer2.print(); Outer2.Inner i
5、 = new Outer2.Inner();结果Inner str1 生成的class 文件如下:静态内部类并没有持有外部类的引用。3. 局部内部类定义在方法体或者一个作用域内的内部类。不能带private, public, protected修饰符。可以带final, abstract。类似一个局部变量。 可以访问外部类的成员变量和方法。 可以访问作用域的参数和局部变量。 相应的, static 方法/语句块中定义的内部类,只能访问静态成员。interface InnerInterface public void print();public class Outer3 public void
6、 print() Outer3 str1:Outer3 str2:Outer3 str3:Outer3 str4: public static void InnerPrint() class Inner implements InnerInterface Static Method Inner str1Static Method Inner class print + Outer3.str4); Inner i = new Inner(); public InnerInterface getInnerInstance(boolean b) int var = 10; Outer3 o = new Outer3();Method parameter: + b);Method variable: + var);Method o: + o); + Outer3.this.str1); + Outer3.this.str2); + Outer3.this.s
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1