类的匿名内部类
1. 解释
匿名内部类常用在接口的实现上,但是类也可以有匿名内部类.
public class Wrapping {
private int i;
public Wrapping(int x) { i = x; }
public int value() { return i; }
}
public class Parcel8 {
public Wrapping wrapping(int x) {
return new Wrapping(x) {
@Override
public int value() {
return 1;
}
};
}
public static void main(String[] args) {
Parcel8 wrapping = new Parcel8();
System.out.println(wrapping.wrapping(3).value());//结果是1
}
}
Wrapping是一个类,但是Parcel8中的方法可以返回它的匿名内部类,并且重写了value方法,main方法执行后,输出和预期一样,是1.
2. 带参数的匿名内部类
public class Pracel10 {
public Destination destination(String dest, float price) {
return new Destination() {
private int cost;
{
cost = Math.round(price);
if(cost > 100) {
System.out.println("Over budget!");
}
}
private String label = dest;
@Override
public String readLabel() {
// TODO dest-generated method stub
return label;
}
};
}
public static void main(String[] args) {
Pracel10 p = new Pracel10();
Destination d = p.destination("Test", 101.3f);
System.out.println(d.readLabel());
}
}
destination方法中的匿名内部类,定义了cost变量,然后通过构造块初始化cost值,需要注意的是,destination方法的参数必须是final类型的,如果中途dest和price参数有变化,会报编译错误.
匿名内部类的缺点就是初始化值只有一个构造块,因为没有名称,所以不能重载构造方法,而且匿名内部类只能继承一个类,无法实现其他接口.