gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:08:52 24 4
gpt4 key购买 nike

我正在学习接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com