gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:32:00 42 4
gpt4 key购买 nike

我正在向我的 friend 解释 OOP。我无法回答这个问题。

我只是逃避说,因为 OOP 描绘的是真实世界。在现实世界中, parent 可以容纳 child ,但 child 不能容纳 parent 。在 OOP 中也是如此。

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 的成员的超集。那为什么 aChild 不能容纳 parent 。

最佳答案

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

class Fox : Animal

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

您的 OOP 似乎也搞混了。这不是父子关系,因为不涉及组合/树。这是祖先/后代继承关系。

继承是“类型”而不是“包含”。因此,Fox 是 Animal 的一种,在你的情况下听起来不对 - “Child is a type of Parent”?类的命名是困惑的根源;)。

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

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

关于c# - 为什么引用子类对象不能引用父类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145767/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com