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唯一的选择是使用反射,如果你不能修复代码,我会建议你使用反射。