无法访问类型 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() };
您的 类 Chicken
和 Apple
是 Inner Class 并且访问任何 Inner Class 函数的方法是 OuterClass.InnerClass innerObject = outerObject.new InnerClass()
.
您已经在此处创建了外部 Class 的对象:InterfaceTestClass x = new InterfaceTestClass();
因此,当您放置 x.new Chicken()
时,您可以方便地使用内部 Class 函数。
查看内部 Classes 以更好地理解这个概念。希望对您有所帮助。
我正在学习接口并创建了以下程序来测试我创建的接口:
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() };
您的 类 Chicken
和 Apple
是 Inner Class 并且访问任何 Inner Class 函数的方法是 OuterClass.InnerClass innerObject = outerObject.new InnerClass()
.
您已经在此处创建了外部 Class 的对象:InterfaceTestClass x = new InterfaceTestClass();
因此,当您放置 x.new Chicken()
时,您可以方便地使用内部 Class 函数。
查看内部 Classes 以更好地理解这个概念。希望对您有所帮助。