Why can't reference to child Class object refer to the parent Class object?

.net, c#, c++, java

Solution

Exactly because aChild is a superset of aParent's abilities. You can write:

class Fox : Animal

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 ;).

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

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

Problem

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.

Original source