内部类
内部类的分类:
- 静态内部类
- 成员内部类
- 局部内部类
- 匿名内部类
静态内部类:
-
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
-
只能直接访问外部类的静态成员(实例成员需要实例化外部类对象)
Outer.Inner in=new Outer.Inner(); //外部类·内部类,然后直接new外部类·内部类
-
其中的方法可以Outer.Inner.method();直接访问
成员内部类:
-
在类的内部定义,和实例化属性、方法同级
实例化必须借助外部类。 Outer out=new Outer(); Outer.Inner in =out.new Inner();
-
内部与外部类同名优先访问内部类属性
-
成员内部类中不能定义静态成员
-
成员可以有静态常量
局部内部类:
- 定义在外部类方面中,作用域仅限于本方法
- 局部内部类访问外部类当前方法的局部变量时,变量必须为final修饰的常量
匿名内部类(重点):
没有类名的局部内部类
必须实现一个父类或者实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
优点:减少代码量
缺点:可读性较差
interface USB {
void run();
void go();
}
public class AnonymousClass {
public static void main(String[] args) {
//方法一
new USB() {
@Override
public void run() {
System.out.println("run!!!!");
}
@Override
public void go() {
System.out.println("go!!!!");
}
}.run();
//方法二
USB usb=new USB() {
@Override
public void run() {
System.out.println("run!!!!");
}
@Override
public void go() {
System.out.println("go!!!!");
}
};
usb.go();
}
}