为什么不能引用子类对象引用父类对象?

爪:

我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻?

我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P

class Parent
{
  int prop1;
  int prop2;
}

class Child : Parent // class Child extends Parent  (in case of Java Lang.)
{
  int prop3;
  int prop4;

  public static void Main()
  {
     Child aChild = new Child();
     Parent aParent = new Parent();
     aParent = aChild;// is perfectly valid.
     aChild = aParent;// is not valid. Why??

  }
}

为什么此陈述无效?

 aChild = aParent;// is not valid. Why??

因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。

Kornel Kisielewicz:

正是因为aChild是aParent功能的超集。你可以写:

class Fox : Animal

因为每只狐狸都是动物。但是另一种方式并不总是正确的(并非每个动物都是狐狸)。

同样,您似乎混合了OOP。这不是父子关系,因为不涉及构图/树。这是祖先/后代继承关系。

继承是“类型的”而不是“包含”的。因此,它是狐狸,是动物的一种,在您的情况下,听起来不对-“孩子是父母的一种”?类的命名是造成混乱的根源;)。

class Animal {}
class Fox : Animal {}
class Fish : Animal {}

Animal a = new Fox(); // ok!
Animal b = new Fish(); // ok!
Fox f = b; // obviously no!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么对象不能引用父对象和子对象?

尽管子类对象调用该方法,为什么“ this”仍引用父类?

为什么我不能引用指向实例化对象函数的指针?

引用父类对象的子类变量

为什么不能引用刷新按钮?

“永远不能引用来引用另一个对象”是什么意思?

为什么在对象的另一个键中不能引用一个键?

为什么我不能在期望父类列表的函数中引用子类列表?

对超类对象的子类引用

为什么我不能引用图像数组?

为什么我不能引用我的匿名函数?

为什么在隐藏变量时不能引用变量?

为什么动态方法分派和超类变量可以引用子类对象?

使用声明不能引用类成员

在构造函数中,为什么在执行超类构造函数之前不能引用当前类的字段?

为什么我在这里不能通过引用传递类对象?

将类对象的引用类型与父对象引用类型之间的区别是什么?

为什么我不能引用Function.identity作为收集器中的方法引用

如何获取子类对象的引用类

为什么用JPA不能更改实体的引用对象?

为什么不能取消引用对象的指针?

什么是类,引用和对象?

对子类对象的超类引用显示与对子类对象的子类引用相同的行为

子类的对象引用

子类属性指向来自父类的相同对象引用

为什么某些类方法返回“ * this”(self的对象引用)?

EF4更新导航属性IEntityChangeTracker的多个实例不能引用实体对象

插入数据库时,IEntityChangeTracker的多个实例不能引用一个实体对象

为什么一个List <父类>对象可以浇铸为子类对象?