If a Father is a Parent and a Parent is a Person and a Person has a Father I create the following:
class Person开发者_JAVA百科{
Father father;
}
class Parent extends Person{}
class Father extends Parent{}
Instances:
Person p1 = new Person();
Person p2 = new Person();
p1.father = p2; //father is of the type Father
This doesn't work... Now try casting::
Person p1 = new Person();
Person p2 = new Person();
p1.father = (Father)p2;
This doesn't work either.
What does work for this case?
Actually, Father is not a sub class of person. It is just a relation.
class Person {
Person father;
}
The most obvious thing is that a Father IS a Person. A Person does NOT have to be a Father though, when it comes to the concrete instance. This example specifically, would work if you father field was of type Person, or you instantiated p2 as a new Father.
You cannot cast like that. Your person is not a father so casting to one won’t work. You can only cast to something that the object is.
Person p1 = new Person();
Person p2 = new Father();
p1.father = (Father)p2;
Or directly:
Father p2 = new Father();
p1.father = p2;
But being a father isn’t a good differentiation in the class hierarchy. I probably wouldn’t create an own class for it: being a father is just one of many roles that one person fulfils so I would remove that class and declare the father
member as a regular Person
. Same for Parent
.
精彩评论