0

父が親であり、親が人であり、人が父を持っている場合、私は以下を作成します。

 class Person{
  Father father;
 }
 class Parent extends Person{}
 class Father extends Parent{}

インスタンス:

Person p1 = new Person();
Person p2 = new Person();
p1.father = p2; //father is of the type Father

これは機能しません...キャストしてみてください::

Person p1 = new Person();
Person p2 = new Person();
p1.father = (Father)p2;

これも機能しません。

この場合、何が機能しますか?

4

3 に答える 3

1

実際、父は人のサブクラスではありません。それはただの関係です。

 class Person {
    Person father;
 }
于 2010-06-06T10:10:44.973 に答える
1

最も明白なことは、父は人であるということです。しかし、具体的な例に関しては、人は父親である必要はありません。この例は、具体的には、父親のフィールドがPersonタイプである場合、またはp2を新しい父親としてインスタンス化した場合に機能します。

于 2010-06-06T10:13:02.847 に答える
0

そのようにキャストすることはできません。あなたの人は父親ではないので、父親にキャストすることはできません。オブジェクトがであるものにのみキャストできます。

Person p1 = new Person();
Person p2 = new Father();
p1.father = (Father)p2;

または直接:

Father p2 = new Father();
p1.father = p2;

しかし、父親であることは、クラス階層の良い差別化ではありません。私はおそらくそれのために独自のクラスを作成しないでしょう:父親であることは一人が果たす多くの役割の1つにfatherすぎないので、そのクラスを削除してメンバーを正規として宣言しPersonます。についても同じですParent

于 2010-06-06T10:11:14.750 に答える