我现在正在尝试深入研究匿名类,并且只出现了一个问题,我不想参考太多细节,也不想直接提出我的问题:如何在以下匿名类中调用方法sizzle()
:
public class Popcorn {
public void pop() {
System.out.println("popcorn");
}
}
class Food {
Popcorn p = new Popcorn() {
public void sizzle() {
System.out.println("anonymous sizzling popcorn");
}
public void pop() {
System.out.println("anonymous popcorn");
}
};
public void popIt() {
p.pop(); // OK, Popcorn has a pop() method
p.sizzle(); // Not Legal! Popcorn does not have sizzle()
}
}
在多态规则中,众所周知并确定的是,超类的引用不能调用子类的方法而不进行下转换(即使它引用给定子类的对象)。但是,在上述情况下,调用
sizzle()
方法的“关键”是什么? 最佳答案
完全无法从外部访问sizzle()
方法,因为该类是匿名的。p
引用是类型Popcorn
,并且没有定义sizzle()
。
匿名类本来应该是一次性的,并且在某些设计模式(例如Observer)中大量使用,因为Java没有一流的功能,即您无法传递功能对象。