匿名内部类必须extends类或implements接口,否则编译器不认识.它是没有类名的,在定义时显示的是它所继承的父类或 接口的名字.
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。
例:
public class Parce16{
public Contents cont(){
return new Contents(){ //匿名内部类.
private int i = 11;
public int value(){return i;}
}; //这里有个分号
}
}
在匿名内部类末尾的分号,并不是用来标记内部类的结束,实际上,它标记的是表达式的结束,只不过这个表达式正巧包含了匿名类.在匿名类中不可能有命名构造器(因为它根本没有名字!),但通过实例初始化,就能够达到为匿名内部类创建一个构造器的效果.
例:
dest(final String dest,final float price){
return new Destination(){
private int cost;
{ //这里是一对独立的大括号表示实例初始化
cost = Math.round(price);
if(cost>100) System.out.println("Over budget!");
}
private String label = dest;
public String readLabel(){return label;}
};
}
对于匿名类而言,实例初始化的实际效果就是构造器.当然它受到了限制---你不能重载实例初始化方法,所以你仅有一个这样的构造器.
因其为局部内部类,那么局部内部类的所有限制都对其生效------(参看:内部类之局部变量)
当需要多个对象时使用局部内部类方可行,因为局部内部类有构造方法,可产生多个对象。匿名内部类中不能定义构造方法,它只有一个实例.
匿名内部类
最新推荐文章于 2021-02-12 23:48:23 发布