package tigers;
class Super{
protected String name;
public Super(String name) {
this.name = name;
}
public void append(int ch) {
//do nothing
}
public String getName() {
return this.name;
}
}
public class Tiger35 {
public Super getSuper(String name) {
return new Super(name) {
public void append(int ch) {
super.name += "*" + ch;
}
public String toString() {
return "一个匿名内部类:";
}
};
}
public static void main(String[] args) {
Tiger35 t35 = new Tiger35();
Super s = t35.getSuper("bitan");
for (char c = 'Z'; c < 'a'; c++) {
s.append(c);
}
System.out.println(s + s.getName());
}
}
结果:
一个匿名内部类:bitan*90*91*92*93*94*95*96
结论:
一、由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。
二、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。
三、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。