2010-03-03 74 views
5

我有兩個關於下面的代碼的問題。 1.如何在不使用setter的情況下構造第三個構造函數? 2.這個()在最後一個構造函數中做了什麼。「this()」在構造函數中做了什麼?

 
public class Person { 

    private String name; 
    private String address; 

    Person(){} 
    Person(String name){ 
     this.name = name; 
    } 
    Person(String address){ 
     //Person(java.lang.String) is already defined. 
    } 

    Person(String name,String address){ 
     this(); 
     this.name = name; 
     this.address = address; 
    } 
} 

我給問題的解決方案是 個人(對象地址){ this.address =(字符串)地址; } 但是,我不確定這一點。

我想這();在過去的構造函數調用構造函數的人(){},但如果這樣做,是不是意味着,創建了兩個Person對象時,我打電話

 
Person p = new Person("myName","myAddress"); 

謝謝!

+0

感謝您的快速回復。我實際上正在閱讀另一篇文章,剛剛提出這兩個不確定的問題,所以編寫了這個例子。 但是,現在問題已經很清楚了,再次感謝。 – user200340

回答

8

的問題Person(String name)Person(String address)是,你不能有兩個構造函數使用相同的參數。編譯器將不知道是哪一個,當你想調用像這樣調用:new Person("Joe Blow");

你可以做這樣的事情,而不是:

Person(String name) 
{ 
    this.name = name; 
} 
Person(String name, String address) 
{ 
    this(name); 
    this.address = address; 
} 

的「this()」在您的最後一個構造函數只是告知構造函數調用默認構造函數作爲構造對象的過程的一部分。它不會創建兩個對象,它只是在def中運行代碼。構造函數,在你的情況下,什麼都不做。

+0

很好的答案。但是,爲什麼不用這個方法(String,「」)(請參閱我的答案)? – JasCav

+0

是的,這對你的答案來說是一個很好的答案+1。讓更一般的構造函數調用更具體的構造函數。 –

0

你對最後一條語句是正確的,但是沒有創建兩個Person對象。在內部,這就像一個方法調用。我不明白你想用這段代碼實現什麼。在構造函數中調用最後的構造函數new Person("1", "2")或內部this("1", "2")。這裏也沒有安裝人員。安裝人員的方法如setName(String)setAddress(String)等。吸氣劑的方法如String getName(),String getAddress()

另一個答案說,你也不能有兩個具有相同參數類型的構造函數。只需創建一個構造函數,其中包含您需要設置的所有內容。

0
  1. 對不起沒有理解問題
  2. 是的,這()調用第一個構造函數。但不用擔心,兩個實例不會被創建!實際上,創建新實例的過程分爲兩部分:內存分配,調用構造函數。所以如果你在內部調用另一個構造函數,它只會執行該代碼。構造函數本身就是一種特殊的方法,它不會創建實例
4

雖然有些事情需要考慮 - 您是否想要創建一個沒有名稱或地址的Person對象?如果你不這樣做,爲什麼要提供這些構造函數(而不是你可以這樣做 - 它們具有相同的參數,所以編譯器不能區分它們)?我想每個人都會有一個名字。也許有人不會有地址。

在創建構造函數之前考慮你的對象。

另一種可能性是:

public class Person { 

    private String name; 
    private String address; 

    Person(String name) { 
     this(name, ""); 
    } 

    Person(String name, String address) { 
     this.name = name; 
     this.address = address; 

     // TODO - Other initializations. 
    } 
} 
0

這就要求的人員(),但未創建兩個對象。

1

使用工廠方法來構造這個對象

public class Person { 

    private String name; 
    private String address; 

    public Person(String name, String address) { 
     this.name = name; 
     this.address = address; 
    } 

    public static Person createHomelessPerson (String name) 
    { 
     return new Person(name, null); 
    } 

    public static Person createNamelessPerson (String address) 
    { 
     return new Person(null, address); 
    } 
} 
+0

+1方法名! :d –

相關問題