/**
- 总结:
- 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。
- 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。
- 3.实例化一个非静态的内部类的方法:
- a.先生成一个外部类对象实例
- OutClassTest oc1 = new OutClassTest();
- b.通过外部类的对象实例生成内部类对象
- OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();
- 4.实例化一个静态内部类的方法:
- a.不依赖于外部类的实例,直接实例化内部类对象
- OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();
- b.调用内部静态类的方法或静态变量,通过类名直接调用
- OutClassTest.InnerStaticClass.static_value
- OutClassTest.InnerStaticClass.getMessage()
*/
package innerAndOutClass;
public class OutClass {
static int a;
int b;
public static void outTest(){
System.out.println("out class static function");
}
public OutClass(){
InnerClass ic = new InnerClass();
System.out.println("外部类创建一个内部类的实例");
}
//非静态内部类
private class InnerClass{
//只有在静态内部类中才能定义或者声明静态成员或者方法
//private static String tt = "0";
private int flag = 0;
public InnerClass(){
//非静态内部类可以访问外部类所有的静态非静态资源
System.out.println("InnerClass creat a:" + a);
System.out.println("InnerClass creat b:" + b);
System.out.println("InnerClass creat flag:" + flag);
//调用外部类的静态方法
outTest();
}
private String getKey(){
return "no-static-inner";
}
}
//静态内部类
private static class InnerStaticClass{
private static String static_value = "static_value";
private int flag = 0;
public InnerStaticClass(){
System.out.println("OutClass create a:" + a);
//System.out.println("OutClass create b:" + b);
System.out.println("InnerStaticClass flag:"+flag);
System.out.println("InnerStaticClass static_value:"+static_value);
}
public static String getMessage(){
return "inner static class function";
}
}
public static void main(String[] args) {
OutClass oc = new OutClass();
//创建内部类实例的方法
OutClass.InnerClass no_static_inner = oc.new InnerClass();
System.out.println(no_static_inner.getKey());
System.out.println(OutClass.InnerStaticClass.static_value);
//不依赖于外部类的实例,直接实例化内部静态类
OutClass.InnerStaticClass inner = new OutClass.InnerStaticClass();
System.out.println(inner.flag);
System.out.println(OutClass.InnerStaticClass.getMessage());
}
}