2010-03-03 3 views
5

다음 코드에 대해 두 가지 질문이 있습니다. 1. setter를 사용하지 않고 세 번째 생성자를 생성하는 방법은 무엇입니까? 2. this()는 마지막 생성자에서 무엇을합니까?"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 = (문자열) 주소; } 그러나 이것에 대해서는 잘 모르겠습니다.

나는 this(); 마지막 생성자에서 생성자 Person() {}을 호출하지만, 호출 할 때 두 개의 Person 객체가 생성된다는 것을 의미합니다.

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

감사합니다 !!!

+0

감사를 구성합니다. 나는 실제로 다른 게시물을 읽고 있었고,이 두 가지 확실하지 않은 질문으로 나왔습니다. 그래서이 예제를 만들었습니다. 그러나 질문은 분명합니다. 다시 한 번 감사드립니다. – user200340

답변

8

문제를 만들지 않습니다, 단지 특별한 방법이며 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

좋은 답변입니다. 그러나, 이것 (문자열, "") (내 대답을 참조)와 반대로 이동하지 않는 이유는 무엇입니까? – JasCav

+0

네, 그 대답에 대한 좋은 지적 +1입니다. 보다 일반적인 생성자가 더 구체적인 생성자를 호출하게하십시오. –

0

마지막 문장은 맞지만 두 개의 Person 객체는 생성되지 않습니다. 내부적으로 이것은 메소드 호출과 같습니다. 이 코드를 사용하여 달성하려는 작업을 이해하지 못합니다. 마지막 생성자를 호출하려면 new Person("1", "2") 또는 내부적으로 생성자에 this("1", "2")을 호출하십시오. 여기에 세터도 없습니다. 설정자는 setName(String), setAddress(String) 등과 같은 메소드입니다. 게터는 String getName(), String getAddress()과 같은 메소드입니다.

또 다른 대답은 동일한 인수 유형을 가진 두 개의 생성자를 가질 수 없다는 것입니다. 설정할 필요가있는 모든 구성 요소를 하나의 생성자로 만듭니다.

0
  1. 죄송는 질문
  2. 네,() 첫번째 생성자 호출을 이해하지 않았다. 하지만 두 가지 인스턴스가 만들어지지 않을까 걱정하지 마십시오! 사실 새 인스턴스를 만드는 작업은 메모리 할당, 호출 생성자의 두 부분으로 이루어집니다. 따라서 내부적으로 다른 생성자를 호출하면 해당 코드가 실행됩니다. 생성자 자체는 Person(String name)으로 예를
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의 메소드 이름! :디 –