超类型变量可以引用子类对象吗?

时间:2012-06-01 03:46:31

标签: java object

例如:

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>

那又错了什么?谢谢!

2 个答案:

答案 0 :(得分:3)

答案是"是"超类可以引用一个子类,但你提出错误的问题。

您收到此错误是因为BA的封闭类(意味着您必须拥有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)

检查你的parantheses !!它应该是:

class A {
}
public class B extends A {


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

}

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