java - 父类(super class)类型变量可以引用子类对象吗?

标签 java object

例如:

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)可以引用子类,但你问错了问题。

您收到此错误是因为 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
    }
}

关于java - 父类(super class)类型变量可以引用子类对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10844128/

相关文章:

java - 为什么 ByteArrayOutputStream 使用 int?

java - 尽管设置正确,@Autowired @Service Bean 为空

java - 将两种方法合二为一

java - 为什么我们不应该创建一个 Spring MVC Controller @Transactional?

javascript - 递归构建对象

java - 如何选择JTable的所有行?

javascript - 如何解析对象的字符串?

javascript - 从 jQuery 函数引用 Javascript "Class"方法

java - native 创建的 Java 对象是否需要同步才能 Access ?

JavaScript - 将多个对象存储在数组中并通过访问它们的属性