例如:
public class A {
public class B extends A {
}
public static void main(String[] args) {
A a;
a = new B();
}
}
我搜索了一些类似的问题,它们显示“是的,父类(super class)类型变量可以引用子类对象”。但在 Eclipse 中,上述代码会出现错误,例如“无法访问类型 A 的封闭实例。必须使用 A 类型的封闭实例来限定分配(例如 x.new A(),其中 x 是 A 的实例)。”
那有什么问题吗?谢谢!
最佳答案
答案是"is"父类(super class)可以引用子类,但你问错了问题。
您收到此错误是因为 B
是 A
的封闭类(这意味着您必须拥有 A
的实例才能拥有 B
的实例),但您是从静态方法引用它(即不是 A
的实例)。
只需将 B
更改为 static
类即可。
public class A {
public static class B extends A { // <-- Added static keyword
}
public static void main(String[] args) {
A a;
a = new B();
}
}
没有错误。
另一个选项是将其保留为封闭类并执行以下操作:
public class A {
public class B extends A { // leave B as an enclosed class
}
public static void main(String[] args) {
A a = new A();
a = a.new B(); // can only create a B in the context of an A
}
}
关于java - 父类(super class)类型变量可以引用子类对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10844128/