注意:java编译器编译任何一个类时,会为其产生一个.class文件,嵌套类就会产生两个.class文件。
1 public class Outer { 2 3 /** 4 * @param args 5 */ 6 int outer_in = 100; 7 public class Iner{ // 内部类只能在外部类使用 8 int iner_in = 50; 9 public void display(){ 10 System.out.println(outer_in); // 内部类可以直接访问外部类的成员函数 11 } 12 } 13 public void Test(){ 14 //iner_in = 500; // 外部类不能直接访问内部类中的成员函数,只能通过对象访问 15 Iner in = new Iner(); 16 in.display(); 17 System.out.println(in.iner_in); 18 } 19 public static void main(String[] args) { 20 // TODO Auto-generated method stub 21 Outer o1 = new Outer(); 22 o1.Test(); 23 } 24 25 }
输出:100
内部类保存着外部类的一个this指针,所以能够访问到外部类。如果把内部类改为静态类(this消掉),则外部类和内部类不存在任何关系。
把两个看成没有关系的类就可以了... (当定义一个内部类的对象时,用OutClass.InerClass obj)
2、内部类的访问[注意]
内部类为一般类时:
OuterClass obj1 = new OuterClass();
OuterClass.InerClass obj2 = obj1.new InerClass();
内部类为静态类时:
OuterClass.InerClass obj3 = new OuterClass.InerClass();