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

问题描述 投票:-1回答:1

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

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() };
java interface inner-classes
1个回答
0
投票

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

您在这里创建了外部类的对象:InterfaceTestClass x = new InterfaceTestClass();,因此,当您放置x.new Chicken()时,便可以使用内部类功能。

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

© www.soinside.com 2019 - 2024. All rights reserved.