3

3つの異なるクラスがあるとしましょう:

クラスパーソンクラスルームクラスハウス

それらは次のようにリンクされています。

私がクラスハウスで私がすること:クラスルームRoom room = new Room(); で私がすること:Person person = new Person();

個人的に私はこの方法を持っています:

public String getName(){
 return name;
}

クラスHouseからこのメソッドにアクセスするにはどうすればよいですか?

私が今やっている方法は、次のようにRoomクラスでメソッドを繰り返すことです。

public String getName(){
 return person.getName();
}

したがって、HouseではRoomgetName()からメソッドを呼び出し、RoomではPersonからメソッドを呼び出します。したがって、名前変数はPersonからRoomを介してHouseに渡されます!getName()

しかし、このようにして、House でアクセスする必要がある Person のすべてのメソッドを複製しています。これはいけません.... 「拡張」について考えましたが、それは意味がありません。誰かが私に説明してもらえますか (私のコードには多くのメソッドが複製されています)。それは基本的なOOPのものかもしれませんが、私はそれを理解できないようです.

前もって感謝します!

4

2 に答える 2

2

しかし、このようにして、House でアクセスする必要がある Person のすべてのメソッドを複製しています。これは正しくありません....

あなたが正しい。その必要はありません。それは正しい方法ではありません。

Personクラスで参照を持っているのでRoom、「ゲッター」を定義するだけですperson: -

public Person getPerson() {
    return person;
}

そして、クラスを形成すると、次のような名前とその他の詳細Houseを取得できます。person

room.getPerson().getName();
room.getPerson().getAge();

したがって、基本的に、クラス内のインスタンスのperson参照のコピー (個人インスタンス自体のコピーではない)を取得しています。そして、クラスでのみ定義されているかのように、その参照を使用します。roomHouseHouse

もう 1 点、ゲッターが非公開であることがわかりました。あなたはそれをすべきではありません。公開しないと、外部からアクセスできなくなります。ほとんどの場合、公開する必要がありますgetterssetters

于 2013-01-25T20:59:19.887 に答える
1

room のプロパティとして person を公開します。

room.getName() が部屋の名前を返すことを期待するので、あなたが持っているものは少し奇妙です。

代わりに Room には getPerson() メソッドが必要なので、人の名前が必要な場合は room.getPerson().getName()

于 2013-01-25T21:00:53.687 に答える