内部类(1.编译后可以生成独立的字节码文件 2.内部类可直接访问外部类的私有成员,而不破坏封装 3.可为外部类提供必要的内部功能组件)
{
成员内部类(成员内部类不能定义静态成员、可以包含静态常量,级别低于外部类 ){
Outer outer = new Outerus();//创建外部类对象
Inner inner = outer.new Inner();//创建内部类对象
Inner inner =new Outer().new Inner();//创建内部类对象的一步登天方法
属性和外部类属性相同时访问外部类属性(Outer.this.xxx)默认的话访问内部的
}
静态内部类(static,不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员,相当于一个外部类级别和外部类相同){
直接创建静态内部类对象 Outer.Inner = new Outer.Inner();(Outer.Inner()表现的是一种层次关系)
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类
}
局部内部类(类似于局部变量,定义在外部类的方法中,作用范围和创建对象仅限于当前方法){
局部变量不能带访问修饰符,局部内部类也一样
Outer outer = new Outer();//创建外部类对象去调用局部内部类的方法,(外部类的方法里面创建局部内部类的对象,去调用局部内部类的方法)
局部内部类访问同级别的局部变量时,该局部变量应为常量(final)jdk1.7之前都要加final,18.自动生成。(因为无法保障变量的生命周期与自身相同,变量必须修饰为final)
}
匿名内部类(没有类名的局部内部类,一切特征都与局部内部类相同){
必须继承一个父类或者实现一个接口
使用匿名内部类优化(相当于创建了一个局部内部类)Usb usb = new Usb(){ 重写的方法}
是定义类,实现类,创建对象的语法合并,只能创建一个该类的对象。
}
}