• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

.net 7次浏览

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

我只是想逃避,因为OOP描绘了现实世界。在现实世界中, parent 可以容纳 child ,但 child 不能容纳 parent 。 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成员的超集。那为什么 child 不能容纳 parent 。

解决方案如下:

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

class Fox : Animal

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

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

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

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

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


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)