Java外部类(非静态)访问内部类(静态/非静态)
public class OutClass {
public int a1 = 1;
public static int b1 = 1;
public void outerConMethod(){
System.out.println("外部类的普通方法!");
getInstance().instanceConMethod();
a1 = getInstance().b2;
getInstance().a2 = 3;
instanceInnerClass inner1 = new instanceInnerClass();
inner1.instanceConMethod();
OutClass.instanceInnerClass inner2 = new OutClass.instanceInnerClass();
inner2.instanceConMethod();
staticInnerClass.innerStaticMethod();
System.out.println(staticInnerClass.b3);
OutClass.staticInnerClass staticInner1 = new OutClass.staticInnerClass();
staticInner1.InnerConMethod();
System.out.println(staticInner1.a3);
staticInnerClass staticInner2 = new staticInnerClass();
staticInner2.InnerConMethod();
System.out.println(staticInner2.a3);
}
public static void outerStaticMethod(){
System.out.println("外部类的静态方法!");
OutClass outClass = new OutClass();
instanceInnerClass instanceInnerClass = outClass.new instanceInnerClass();
instanceInnerClass.instanceConMethod();
System.out.println(instanceInnerClass.a2);
System.out.println(instanceInnerClass.b2);
OutClass.staticInnerClass staticInner = new OutClass.staticInnerClass();
staticInner.InnerConMethod();
System.out.println(staticInner.a3);
staticInnerClass.innerStaticMethod();
System.out.println(staticInnerClass.b3);
}
class instanceInnerClass{
public int a2 = 2;
public static final int b2 = 2;
public void instanceConMethod(){
System.out.println("实例内部类非静态方法");
System.out.println(a2);
System.out.println(b2);
System.out.println(a1);
System.out.println(b1);
outerConMethod();
outerStaticMethod();
System.out.println(staticInnerClass.b3);
staticInnerClass.innerStaticMethod();
staticInnerClass staticInnerClass = new staticInnerClass();
System.out.println(staticInnerClass.a3);
staticInnerClass.InnerConMethod();
}
}
static class staticInnerClass{
public int a3 = 3;
public static int b3 = 3;
public void InnerConMethod(){
System.out.println("静态内部类非静态方法");
System.out.println(a3);
outerStaticMethod();
System.out.println(b1);
innerStaticMethod();
OutClass outClass = new OutClass();
System.out.println(outClass.a1);
outClass.outerConMethod();
OutClass outClass1 = new OutClass();
instanceInnerClass instanceInnerClass1 = outClass1.new instanceInnerClass();
System.out.println(instanceInnerClass1.a2);
instanceInnerClass1.instanceConMethod();
System.out.println(a3);
innerStaticMethod();
}
public static void innerStaticMethod(){
System.out.println("静态内部类静态方法");
OutClass outClass = new OutClass();
System.out.println(outClass.a1);
outClass.outerConMethod();
System.out.println(b1);
outerStaticMethod();
OutClass outClass2 = new OutClass();
instanceInnerClass instanceInnerClass1 = outClass2.new instanceInnerClass();
System.out.println(instanceInnerClass1.a2);
System.out.println(instanceInnerClass1.b2);
instanceInnerClass1.instanceConMethod();
OutClass.staticInnerClass staticInnerClass2 = new OutClass.staticInnerClass();
System.out.println(staticInnerClass2.a3);
staticInnerClass2.InnerConMethod();
}
}
public instanceInnerClass getInstance(){
return new instanceInnerClass();
}
public static void main(String[] args) {
OutClass.staticInnerClass innerClass3 = new OutClass.staticInnerClass();
innerClass3.InnerConMethod();
}
}