对于普通内部类和静态内部类 1.静态内部类相对于外部类是独立存在的 2.对于普通内部类是作为外部类的一部分存在的。 调用关系如下: //1.普通内部类可以直接调用外部类的普通属性,普通内部类的方法也可以直接调用外部类的属性。 //2.普通内部类不可以调用外部类的普通方法,普通内部类的方法可以直接调用外部类的方法。 //3.普通内部类调用其他普通内部通过创建其他内部类对象的方式。 //4.普通内部类调用其他静态内部通过创建其他内部类对象的方式。 //5.静态内部类可以直接调用外部类的静态属性,普静态内部类的方法也可以直接调用外部类的静态属性和静态方法。 //6.静态内部类不可以调用外部类的静态方法,静态内部类不可以调用外部类的普通方法。
代码实现:
public class InnerOutClass { public int out1=1;//外部类的普通属性 // public static int outs=staticout;不能 public static int staticout=1;//外部类的静态属性 //普通类A public class A{ //内部类AA int i=out1;//直接调用外部类的普通属性 InnerOutClass a=new InnerOutClass(); // a.D();//不可以调用 //D();//不可以调用 B b=new B();//调用其它内部类 // b.BB();不能 public void AA(){ int aout=out1; System.out.println("AA i:"+i); System.out.println("AA aout:"+aout); System.out.print("AA :"); D(); } } //普通类B(其他类) public class B{ public void BB(){ System.out.println("BB"); } } //静态类C public static class C{ // int ccc=out1; 不能 public static int cc=staticout; InnerOutClass c=new InnerOutClass(); // c.D(); 不能 // c.F();不能 F(); public static void CC(){ int s=staticout; F(); } } //外部类的普通方法D public void D(){ System.out.println("DD"); } //外部类的静态方法F public static void F(){ System.out.println("FF"); } }