匿名内部类必须继承一个父类或者实现一个接口。匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象,因此不允许匿名内部类为抽象类。
匿名内部类不能定义构造器,由于匿名内部类没有类名,所以无法定义构造器,但匿名构造类可以初始化块,可以通过实例初始化块来完成构造函数需要完成的部分。
语法格式:
new 实现接口()|父类构造器(实参列表){匿名内部类的类体部分}
interface MyInter{
public String getName();
}
public class AnonymousTest{
public void test(MyInter i){
System.out.println("The Content of this function is" + i.getName());
}
}
public static void main(String[] args){
AnonymousTest ta;
ta.test(new MyInter(){
public String getName(){
return "Anonymous Content";
}
});
}
}
简言之,匿名内部类的实现方式:第一种,继承一个抽象类重写其方法;第二种,实现一个接口并实现其方法。
使用匿名内部类的两种情况:
实现的抽象方法需要特殊实现;需要抽象类或接口对象。
在匿名内部类编写自己的其他方法不现实,匿名内部类只会被调用一次。
当接口的实例对象需要被重复使用时,可以将接口的实现类定义成一个独立的类;如果这个类只需要一次性使用,则可以定义成匿名内部类。