我正在向我的朋友解释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??
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这个陈述没有效?
aChild = aParent;// is not valid. Why??
Run Code Online (Sandbox Code Playgroud)
因为aChild的成员是aParent成员的超集.那么为什么aChild不能容纳父母.
Kor*_*icz 34
正是因为aChild是aParent能力的超集.你可以写:
class Fox : Animal
Run Code Online (Sandbox Code Playgroud)
因为每只狐狸都是动物.但另一种方式并非总是如此(不是每个动物都是狐狸).
你似乎也把你的OOP混淆了.这不是父子关系,因为没有涉及组合/树.这是祖先/后裔的继承关系.
继承是"类型"而不是"包含".因此它的狐狸是一种动物,在你的情况下听起来不对 - "孩子是一种父母"?类的命名是混乱的根源;).
class Animal {}
class Fox : Animal {}
class Fish : Animal {}
Animal a = new Fox(); // ok!
Animal b = new Fish(); // ok!
Fox f = b; // obviously no!
Run Code Online (Sandbox Code Playgroud)
“Child”类扩展“Parent”
“子类对象本质上是父类对象”
Child aChild = new Child();
Parent aParent = new Parent();
aParent = aChild;// is perfectly valid.
aChild = aParent;// is not valid.
Run Code Online (Sandbox Code Playgroud)
在像普通赋值操作一样的代码段中,上面的内容是从右到左读取的。代码段的第 3 行读取 - “aChild(子类对象)是父类”(由于继承子类对象固有地成为超类对象)因此第 3 行是有效的。
而在第 4 行中,“aParent(父类对象)是子类”(继承并没有说超类对象将成为子类对象。它说的是相反的)因此第 4 行是无效的。