没有可访问的foo类型的封闭实例。为什么?

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

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 Tiger() };
b1004940 回答:没有可访问的foo类型的封闭实例。为什么?

您的类ChickenApple是内部类,访问任何内部类功能的方式是OuterClass.InnerClass innerObject = outerObject.new InnerClass()

您已经在此处创建了外部类的对象:InterfaceTestClass x = new InterfaceTestClass();,因此,当您放置x.new Chicken()时,将有助于使用内部类函数。

查找内部类以更好地理解概念。希望对您有所帮助。

本文链接:https://www.f2er.com/2826178.html

大家都在问