我遇到了一個基本上無法解決的問題,我正在嘗試為房子構建代碼,我想多次呼叫房子而不必每次都打開燈
我的欄位值
private boolean turnon = false;
然后是我開燈的方法
public void turnon() {
turnon = true;
}
基本上我要避免的是每次我想添加一個新房子時不要呼叫該方法,基本上一旦我打開它,它就會為類的每個實體打開。
House x = new House();
x.turnon();
所以假設我創建了另一個 House 類
House y = new House();
我希望在 y 中打開燈,因為我已經在 x 中打開它們
我嘗試靜態定義該方法,但它沒有用,任何建議將不勝感激
uj5u.com熱心網友回復:
在您的 House 課程中,添加以下內容:
public House() {
turnon();
}
uj5u.com熱心網友回復:
每當您創建新房子時,您都可以在建構式中初始化欄位 turnOn 的值(注意駝峰式約定)。
public House(boolean turnOn) {
// initializing other fields
this.turnOn = turnOn;
}
然后,您可以提供常規的 getter 和 setter 來訪問 turnOn 欄位。創建其他房屋時,您可以簡單地使用無引數建構式。
public House() {
// initializing other fields
}
uj5u.com熱心網友回復:
這里混淆的根本原因是:“房子”和燈“開關”不屬于同一類!
所以我認為你應該將 House 和 Switch 建模為不同的類。并且只需讓房屋物件“聚合”一組“開關”和房屋中的其他物件。
例如:
class House {
List<ElectricalFitting> devices;
}
class Switch extends ElectricalFitting {
...
}
uj5u.com熱心網友回復:
您可以將光的默認狀態作為靜態欄位提取到基類中。您的 House 類擴展了這個基類,繼承了默認狀態欄位,并在其建構式中將默認值復制到實體狀態。這兩個設定器同時更改默認狀態和實體狀態。
例如,如果默認狀態是關燈 (false),則 House 的每個新實體都會關燈。
但是如果你在一個房子里打開燈(真)而不是默認更改為真,并且每個新實體都打開燈。
每個現有的 House 實體在打開或關閉燈時獨立于所有其他房屋。
public abstract class HouseBase {
protectet static boolean defaultSwitchState = false;
}
public class House extends HouseBase {
private boolean turnOn = false;
public House() {
turnOn = defaultSwitchState;
}
public void turnOn() {
super.defaultSwitchState = true;
turnOn = true;
}
public void turnOff() {
super.defaultSwitchState = false;
turnOn = false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/413706.html
標籤:
