I was explaining OOP to my friend. I was unable to answer this question.
I just escaped by saying, since OOP depicts the real world. In real world, parents can accommodate children but children cannot accommodate parents. same is the case in 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??
}
}
Why isn’t this statement valid?
aChild = aParent;// is not valid. Why??
since aChild‘s members are superset of aParent‘s members. Then why can’t aChild accommodate a parent.
Exactly because aChild is a superset of aParent’s abilities. You can write:
Because each Fox is an Animal. But the other way is not always true (not every Animal is a Fox).
Also it seems that you have your OOP mixed up. This is not a Parent-Child relationship, because there’s no composition/trees involved. This is a Ancestor/Descendant inheritance relation.
Inheritance is “type of” not “contains”. Hence it’s Fox is a type of Animal, in your case it doesn’t sound right — “Child is a type of Parent” ? The naming of classes was the source of confusion ;).