Room
とSuite
クラスの両方に別のstatic
フィールドを持つことは、最も簡単で簡単な解決方法です。
Room
_________|_______
/ \
Standard Suite
| |
`static int price; `static int price;
代わりに、各Room
型のベース価格を格納Room
クラスでstatic Map<Class<? extends Room>, Integer>
を作成することができます。
public class Room {
private static Map<Class<? extends Room>, Integer> prices =
new HashMap<>();
public final int getRoomBasePrice() {
// If a Room subclass does not have a specific base price, return
// 1000 by default.
return Room.prices.getOrDefault(this.getClass(), 1000);
}
/** Sets the base price for the specified Room type.
*/
public final void setRoomBasePrice(int price) {
Room.prices.put(this.getClass(), price);
}
}
上記のコードを使用すると、クラスのすべてのインスタンスで価格が一定に保たれます。あなたの実際の質問とは関係のない
mySuite.setRoomBasePrice(2000);
(new Suite()).getRoomBasePrice(); // -> 2000
、私はあなたの条件が悪い決断「私はそれが標準のすべてのオブジェクトに静的なままであるように、標準的な部屋の価格を設定する」を検討してください。あなたはそれを再考すべきです。客室料金は、誰が予約したか、いつ(少なくともほとんどのホテルで)いつ、同じ日に同じ物理的な部屋であっても個人である場合があります。 – Fildor
あなたは美しいOOPソリューションを求めていますが、静的な制限を使って解決しています。 *なぜ*価格は静的である必要がありますか? –
@Fildorだが悲しいことに、それは必要ではない – AghaKhan