无法访问类型 foo 的封闭实例。为什么?

No enclosing instance of type foo is accessible. Why?

我正在学习接口并创建了以下程序来测试我创建的接口:

public class InterfaceTestClass {
    public static void main(String[] args) {
        InterfaceTestClass x = new InterfaceTestClass();
        Object[] foodItems = { new Apple(), x.new Chicken(), x.new Tiger() };
        for (int i = 0; i < foodItems.length; i++) {
            if (foodItems[i] instanceof Edible) {
                ((Edible) (foodItems[i])).howToEat();
            }
            if (foodItems[i] instanceof Tiger) {
                ((Tiger) (foodItems[i])).howToEat();
            }

        }
    }

    public interface Edible {
        void howToEat();
    }

    public class Apple implements Edible {
        @Override
        public void howToEat() {
            System.out.println("Eat apple as salad");
        }
    }

    public class Chicken implements Edible {

        @Override
        public void howToEat() {
            System.out.println("Eat Chicken with rice");
        }

    }

    public class Tiger {
        public void howToEat() {
            System.out.println("This is not edible");
        }
    }
}

如果我没有将 'x' 放在 'new Apple()' 或 Chiken 或 Tiger 之前,我会收到一条与此问题标题中的错误消息相同的错误消息。为什么会这样?

Object[] foodItems = { x.new Apple(), x.new Chicken(), x.new Tiger() };

您的 类 ChickenApple 是 Inner Class 并且访问任何 Inner Class 函数的方法是 OuterClass.InnerClass innerObject = outerObject.new InnerClass().

您已经在此处创建了外部 Class 的对象:InterfaceTestClass x = new InterfaceTestClass(); 因此,当您放置 x.new Chicken() 时,您可以方便地使用内部 Class 函数。

查看内部 Classes 以更好地理解这个概念。希望对您有所帮助。