概念:
匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
注意事项:
& 编译后的文件命名:外部类$数字 . class
& 无法使用 public、private、abstract、static 修饰,匿名内部类不能出现抽象方法
& 无法编写构造方法,但可以添加构造代码块
& 不能出现静态成员
& 匿名内部类可实现接口也可以继承类,但是不可兼得
& 匿名内部类不能是抽象的,它必须要实现继承的类或者实现接口的所有抽象方法
匿名内部类初始化:
我们一般都是利用构造器来完成某个实例的初始化工作的,但是匿名内部类是没有构造
器的,那怎么来初始化匿名内部类呢?使用构造代码块!利用构造代码块能够达到为匿名内
部类创建一个构造器的效果。
实例:
实例:
匿名内部类可以有不同的表现形式,下面用实例向大家展示一下:
继承式的匿名内部类:
引用变量不是引用 Car 对象,而是 Car 匿名子类的对象。
建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下,是重写父类的方
法,而不是创建新的方法。因为用父类的引用不可能调用父类本身没有的方法,创建新的方
法是多余的。
接口式的匿名内部类:
上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实
现了一个接口的匿名类。而且只能实现一个接口。
参数式的匿名内部类
由上面的三个例子可以看出,只要一个类是抽象的或是一个借口,那么其子类中的方法
都可以使用匿名内部类来实现。最常用的情况就是在多线程的实现上,因为要实现多线程必
须继承 Thread 类或是实现 Runnable 接口
Thread 类的匿名内部类实现:
Runnable 接口的匿名内部类实现:
匿 名 内 部 类 初 始 化