我现在正在尝试深入研究匿名类,并且只出现了一个问题,我不想参考太多细节,也不想直接提出我的问题:如何在以下匿名类中调用方法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没有一流的功能,即您无法传递功能对象。

08-04 21:27