11.0、Java继承与多态 - 匿名内部类
在什么情况下会用到匿名内部类呢?
如果接口的实现类( 或者是父类的子类 )只需要使用唯一的一次;那么这种情况下就可以省略掉该类的定义(指的是实现类),而改为使用 [ 匿名内部类 ];
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称( ) {
// 覆盖重写所有的抽象方法
}
用代码来实现,如下所示 ->
创建 TestService.java 接口文件 ->
public interface TestService {
void test();
}
创建 anonymityInner.java 类,并让其创建匿名内部类,如下所示 ->
public class anonymityInner {
public void anonymityInnerMethod() {
TestService ts = new TestService() {
@Override
public void test() {
System.out.println("实现了TestService的方法");
}
};
ts.test(); //用对象调用匿名内部类中实现的方法
}
}
在使用匿名内部类的时候请注意 ->
匿名内部类,在创建对象时需要实现接口的抽象方法;如果想要创建多个对象,每次创建对象的时候都必须要实现接口中的所有抽象方法才可以创建一个新的对象;
所以匿名内部类虽然说可以让我们省去一些创建实现类的麻烦,但也是建立在只创建一次对象的情况下,才比较方便;否则每次创建对象都必须要重新实现一次全部的抽象方法才可以;
这里匿名内部类没有省略对象的名称,所以可以多次通过该对象调用匿名内部类中的方法;但是像下面的代码一样省略掉对象名,就只能调用其中的一个方法;
在匿名内部类的基础上,还可以继续省略掉匿名对象名,代码如下所示 ->
public class anonymityInner {
public void anonymityInnerMethod() {
new TestService() {
@Override
public void test() {
System.out.println("实现了TestService的方法");
}
}.test();
}
}
这里省略了对象的名字,所以只能调用一次接口中的一个方法,如果想要多次调用接口中的方法,就不要省略掉对象的名称;