Java 如何调用匿名内部类';什么方法?
我理解此代码不合法:Java 如何调用匿名内部类';什么方法?,java,inner-classes,anonymous-inner-class,Java,Inner Classes,Anonymous Inner Class,我理解此代码不合法: class Popcorn { public void pop() { System.out.println("popcorn"); } } class Food { Popcorn p = new Popcorn() { public void sizzle() { System.out.println("anonymous sizzling popcorn"); }
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添加到Popcorn中,没有其他方法。我最初的反应是问,为什么要通过向匿名类添加额外的公共方法来实现。
new Popcorn(){…}.sizzle()代码>@TomHawtin-tackline这就是我要找的。因为如果你不能调用这个方法,这是一个很糟糕的例子,而且它来自于官方的OCJP研究指南,由Kathy batesadd sizzle编写的Popcorn,我最初的反应是问你为什么要在匿名类中添加一个额外的公共方法代码>@TomHawtin-tackline这就是我要找的。因为如果你不能调用这个方法,这是一个很糟糕的例子,它来自于Kathy bates的官方OCJP研究指南+1,唯一的选择是使用反射,如果你不能修复代码,我会建议你使用反射。+1唯一的选择是使用反射,如果你不能修复代码,我会建议你使用反射。