例如:
public class A {
public class B extends A {
}
public static void main(String[] args) {
A a;
a = new B();
}
}
我搜索了一些类似的问题并且他们显示“是的,超类型变量可以引用子类对象”。但是在eclipse中,上面的代码出现了一个错误,例如“没有封闭的A类实例是可访问的。必须使用类型A的封闭实例限定分配(例如xx A(),其中x是A的实例)。” / p>
那又错了什么?谢谢!
答案 0 :(得分:3)
答案是"是"超类可以引用一个子类,但你提出错误的问题。
您收到此错误是因为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
}
}
答案 1 :(得分:-2)
class A {
}
public class B extends A {
public static void main(String[] args) {
A a;
a = new B();
}
}
你的代码中还有两个public
个类!!