2012-08-15 33 views
-1

編輯:我粘貼了錯誤的代碼已經更新了它製作一個私有成員出物體的另一個類

我已經創建了3具體類,前兩個已經完成,做工精細。第三個需要其他兩個類的新對象的私人成員。我如何爲私人成員編寫代碼?我現有的類是NameAddress和PhoneNumber,新的名爲ContactDetails,兩個已創建的類是NameAddress和PhoneNumber(我需要其中的第一個和第二個爲我的私人成員)

我試過了:

public class ContactDetails{ 
    private Object contactName = new NameAddress(); 
    private Object mobile = new PhoneNumber(); 
    private Object home = new PhoneNumber(); 
} 

但這在編譯器中不起作用,並引發錯誤。幫助將不勝感激,我似乎無法找到正確的語法。

+1

我想你應該顯示導致錯誤的代碼部分。這似乎不會導致編譯時錯誤,假設您在代碼中實際上具有右大括號但不在此處。 – Nishant 2012-08-15 04:13:13

+1

@ user1599706請從編譯器發佈確切的錯誤消息 – MartyE 2012-08-15 04:28:01

回答

1

我沒有看到任何明顯的語法錯誤除了缺少}關閉類:

public class ContactDetails { 
    private Object contactName = new NameAddress(); 
} // ← here 

但也許你想申報contactName字段比Object一些更有益?

public class ContactDetails { 
    private NameAddress contactName = new NameAddress(); 
} 

如果沒有幫助,請告訴我們的編譯器錯誤消息到底是什麼。

0

我懷疑你的類沒有無參數構造函數。如果您已經定義了帶參數的構造函數,然後添加到您的NameAddress類:

public NameAddress() { 
} 

,做同樣的`PhoneNumber``

這應該消除編譯器錯誤(但可能不會導致a working application)

0

只是一個預感,但我認爲你可能誤解了你的規格。

當你說:

第三[類]需要其他兩個類的新對象的私有成員。

...那麼這意味着你聲明和稍後實例化你的類中的兩種不同的對象類型。當你需要通過訪問者訪問它們時,你需要明確你要返回的類型。當你通過修改器修改它們時,你必須具體說明你正在修改的對象 - 除非你完全符合這個特定的對象,否則你將面臨丟失對象狀態信息並導致異常行爲的風險與您的程序。

下面是一個例子。此代碼只要setS()傳遞一個字符串工作好:

public class Test { 
    private Object s = new String("Testing"); 

    public Object getS() { 
     return (String) s; 
    } 

    public void setS(Object theS) { 
     s = theS; 
    } 
} 

...但是如果我傳入任何Object的子類(也就是說,任何東西例示與new),我會得到ClassCastException

緩解這種問題的正確方法是在String中特別實例化/返回/傳遞。

public class Test { 
    private String s = new String("Testing"); 

    public String getS() { 
     return s; 
    } 

    public void setS(String theS) { 
     s = theS; 
    } 
} 
+0

爲什麼使用'new String(「Testing」)'而不是''Testing''? – 2012-08-15 12:48:49

+0

要說明'String'是'Object'的意思。當然,你可以以任何方式做到這一點,並獲得相同的結果。 – Makoto 2012-08-15 14:01:24

相關問題