java - 为什么不能创建子类类型的父类的对象,但可以反向创建?

标签 java object inheritance

我已阅读 this-Downcasting is not possible但不知道为什么实际上这是不可能的,下面是代码片段

class Parent {

}

public class Inherit  extends Parent{
    public static void main(String[] args) {
        Parent parent = new Inherit()  //No Error
        Inherit sub = new Parent();  // Type mismatch error
    }
}

我的问题是为什么创建子类类型的父对象是可能的(Parent a = new Inherit()) 但为什么反向是不可能的?实际原因是什么(类型不匹配除外)

最佳答案

一个简单的例子:

class Parent {
  public String name;
}

class Inherit extends Parent {
  public int age;
}

所以每个 Inherit 都有一个名字,但是 Parent 没有年龄。如果您调用以下内容会怎样:

Inherit sub = new Parent();
sub.age; // ERROR: because a parent has no age

因此不可能将父对象分配给子类引用,因为可能会丢失一些东西,就像@OH GOD SPIDERS 指出的那样。

关于java - 为什么不能创建子类类型的父类的对象,但可以反向创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46642702/

相关文章:

asp.net - Entity Framework 删除子对象

flutter - 在 Dart 中,通过类型检查检查一个类是否继承了父类

java - 选择联系人后 onActivityResult 未执行

java - 将依赖值注入(inject)枚举

javascript - 定义数组对象属性

c++ - 从没有默认构造函数的纯抽象类继承

java - JAXB 编码和继承

java - 访问 MQTT 异步消息

java - Java 8 和 11 之间的流差异

javascript - 基于计数器出现的对象