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

标签 java interface inner-classes

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

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");
        }
    }
}

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

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

最佳答案

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

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

查找内部类以更好地理解这个概念。我希望这有帮助。

关于java - 无法访问类型 foo 的封闭实例。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59575384/

相关文章:

java - 我怎样才能得到所有页面内容?

haskell - 抽象记录还是记录接口(interface)?

java - 接口(interface)实现

java - 内部类必须引用封闭类吗?

java - 使用嵌套在另一个类中的类中定义的比较器来实现 Collections.sort

java - 私有(private)嵌套类是否是静态的有关系吗?

java - JSP 不能在 CQ5 中编译?

java - 如何使用 for 循环从 char 数组中绘制 Sprite

c# - 添加结构 : Interface to a List<Interface>

Java构造函数问题