2017-09-05 15 views
1

我有這個類,並且需要知道哪個構造是需要創建一個對象,可以立即使用所有的方法沒有錯誤正確的構造函數運行的所有方法在Java中

public class Robot { 
    private boolean fuelEmpty = true; 
    private int roboID; 
    private String greeting; 
    private String securityProtocol; 

//insert robot constructor here 

public void destroyAllHumans(){ 
    while (fuelEmpty == false) { 
     //robot begins to destroy all humans 
    } 
} 
public int getRoboID(){ 
    return roboID; 
} 
public void greet(){ 
    System.out.println(greeting); 
} 
public void setSecurityProtocol(String proto){ 
    securityProtocol = proto; 
} 
} 

例如應該是這樣的:

public Robot(int id, String greet) { 
    roboID = id; 
    greeting = greet; 
} 

或本:

public Robot(int id, String greet) { 
    roboID = id; 
    greeting = greet; 
    fuelEmpty = false; 
} 

或:

public Robot(boolean full, int id, String greet, String proto) { 
    roboID = id; 
    greeting = greet; 
    fuelEmpty = full; 
    securityProtocol = proto; 
} 

需要哪些這些(或其他不同的東西),以便其他所有方法都可以正常運行?

+0

offtopic:你應該做*** while(!fuelEmpty){***改爲 –

+0

由於'destroyAllHumans'方法具有未定義的主體,因此很難判斷哪些類成員是需要的。什麼是「securityProtocol」? – MaxZoom

+0

歡迎來到Stack Overflow!我注意到你的問題仍然是「開放的」 - 因爲你沒有接受答案。請看看並決定是否要[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案。或者讓我知道,如果有什麼我可以做的,以加強我的投入,使其接受值得。接受幫助未來的讀者確定問題是否得到解決,並表示對花時間回答你的人表示讚賞。謝謝! – GhostCat

回答

1

你可以儘可能多的,因爲你需要重載構造函數中,最重要的是你 創建一個新的後對象被正確實例...

的方式可以是:

public Robot() { 
    this(false, 0, "", ""); 
} 

public Robot(int id) { 
    this(false, id, "", ""); 
} 

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) { 
    this.fuelEmpty = fuelEmpty; 
    this.roboID = roboID; 
    this.greeting = greeting; 
    this.securityProtocol = securityProtocol; 
} 

所以看看如何所有其他構造函數將在最後調用內部

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) 

這將給你的保證,無論哪種construc TOR被調用時,機器人完全創建,並且可以調用所有這些方法沒有崩潰

+0

爲什麼你更喜歡在no參數構造函數中調用'this(false,0,「,」「);'而不是'this(0)'是否有特定的原因?澄清:它沒有什麼錯,我會用「較短」的構造函數,所以我只是好奇你爲什麼選擇另一個:)在選擇背後是否有任何「標準」,或者它只是你的偏好? – BackSlash

+0

nope ...我只是詳細說明OP有多個選項 –

1

該解決方案是這樣的:

  • 你看看你的每一個方法
  • 你檢查哪些場的每方法是使用
  • 你檢查更加緊密,如果方法破裂時字段有其默認null的對象,如,或false爲布爾值)

當你這樣做的所有方法,你會得到這些字段,你需要以某種方式初始化的列表。然後你可以繼續前進並定義一個相應的構造函數。

但當然,這是錯誤的方法。

真正的答案是這樣的:你不把田成一類,因爲你可以。您添加它們是因爲它們是必需的,以便此類可以實現您希望它實現的需求(責任)。含義:你專注於你的課程應該提供的方法。然後你明確你需要哪些領域來實現這些方法。

換句話說:您的班級中正好有班級需要的那些字段。如果你有那些未使用的領域 - 那麼你就會擺脫它們。

相關問題