1

例如:

public class A {

public class B extends A {
}

public static void main(String[] args) {
    A a;
    a = new B();
}

}

我搜索了一些类似的问题,他们显示“是的,超类类型变量可以引用子类对象”。但是在 Eclipse 中,上面的代码出现了一个错误,比如“没有 A 类型的封闭实例是可访问的。必须使用 A 类型的封闭实例来限定分配(例如 xnew A(),其中 x 是 A 的实例)。”

那么有什么问题呢?谢谢!

4

2 回答 2

3

答案是“是”超类可以引用一个子类,但你问错了问题。

你得到这个错误是因为B它是一个封闭的类A(意味着你必须有一个实例才能A拥有一个实例B),但你是从一个静态方法引用它(即不是一个实例A)。

只需更改Bstatic班级。

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
    }
}
于 2012-06-01T03:50:31.303 回答
-2

检查你的括号!!它应该是:

class A {
}
public class B extends A {


public static void main(String[] args) {
    A a;
    a = new B();
}

}

您的代码中还有两个public类!

于 2012-06-01T03:48:26.660 回答