内部类的性质和外部类不一样,务必分清为什么写的这么详细,因为根本没好好学内部类。
内部类基础
- 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。其并没有“is-a”关系,就是一个独立的实体,并且提供了更好的封装,除了该外围类,其他类都不能访问。
- OuterObj outerObj=new OuterObj();
InnerObj innerObj=new outerObj.new InnerObj(); - 内部类会单独产生class文件
内部类种类
局部内部类
在方法内或在某个作用域内的内部类,例如:
局部内部类是无法使用public、protected、private修饰的,同时也不能使用staticpublic class OutterType {
public void function() {
/** 局部内部类Inner*/
class Inner {
public void print() {
System.out.println("局部内部类...");
}
}
}
}
不过可以使用abstract和final,虽然这二者与和上面也没什么关联
匿名内部类是一种局部内部类静态内部类
① 静态内部类不能直接访问外部类的非静态成员,但可以通过 new OuterObj().member 的方式访问
② 静态内部类不会在加载外部类时加载,只有调用时才会加载
③ 非静态内部类中无法定义静态变量、方法,静态内部类才允许
④ 创造静态内部类无需new出外部类