一般 外围类访问静态内部类的方法是:
静态内部类就像一个外围类的静态成员 ,可以实例化它 通过内部类的构造方法初始化内部类, 然后调用里面的方法
内部类访问外围类
- 静态内部类访问外围类:
可以访问外围类的所有成员,包括私有的成员。 - 非静态内部类访问外围类:
可以访问外围类的方法,也可以使用修饰过的(?)this方法 来获取外围实例的引用。
优点:
- 静态内部类的实例可以独立于外围类实例之外
这样就不会消耗过多内存。而非静态内部类必须要有一个关联的外围类实例,也就是 每个内部非静态类实例都要有相关联的外围类实例
一般内部类只供外围类访问(不对)
Map 的 Entry 类就是可以供其他类使用。
- 外围类访问(非)静态内部类
都可以通过实例化内部类,获取内部类的实例之后,通过实例访问内部类
public void unStatic() {
//外围类访问内部非静态类
Inner22 inner22 = new Inner22();
inner22.member();
}
public void get1Inner(){
//外围类访问静态内部类
privateInner = new PrivateInner();
boolean afalse = privateInner.getFalse();
System.out.println(afalse);
}
- 静态内部类访问外围类的静态成员
private static class PrivateInner {
PrivateInner(){
get1();
}
int get1(){
//静态内部类访问外围类的 静态成员 one 但是不能访问非静态的成员
System.out.println("get1");
return one;
}
boolean getFalse(){
return false;
}
}
- 非静态内部类访问外围类的变量成员和方法
public class Inner22{
public Inner22(){
// this(); //不可以
//2种方法访问 外围类
//1 实例化外围类
//2 使用OutterClassName.this.methodName();
Item22 item22 = new Item22();
System.out.println(item22.toString());
//第二种方法 获取外围类this引用
// Item22.this.toString();
}
public void member(){
System.out.println("inner22-unStatic---" + one);
}
}
网友评论