Img profile default
임흥배
  • 2016.8.5 10:42
  • 조회수 125
  • 답변수 1
Img profile default
임흥배
  • 2016.8.5 10:42
  • 조회수 125
  • 답변수 1

2번 3번 생성자 만드는법쪽에 질문이요.

2번에
this.name = name;
this(0);
이렇게 적었는데 오류가 나는이유가 뭘까요?
this.(name,0); 는 가능하더라고요.
그래서 생기는의문점으로
3번에
this.name = name;
this.number = number;
말고
this(name, number);
은 안될까요?

Car.java
public class Car{
    String name;
    int number;

  public Car(){
    this("이름없음",0);
  }
  public Car(String name){
  this(name,0);
  }
  public Car(String name,int number){
  this.name = name;
  this.number = number;
  }
}
CarExam.java
//실행을 위한 코드입니다.
public class CarExam{
    public static void main(String[] args){
        Car car1 = new Car();
        Car car2 = new Car("자동차");
        Car car3 = new Car("자동차",1234);
    }
}
  • #자바 입문
  • #생성자 오버로딩과 this - 실습

1 답변

  • Spgjnhnsidwygch8ddkd
    Chandler
    • 2016.8.8 13:22

    this가 어떤식으로 사용되는지에 대해서 정확히 아셔야하는 데요.

    public Car(){
        this("이름없음",0);
    }
    

    위의 코드에서 this("이름없음", 0)이 의미하는 것은

    public Car(String name,int number){
      this.name = name;
      this.number = number;
    }
    

    이 코드를 호출하겠다는 의미 입니다.
    이는 생성자 내부에서 생성자를 호출하는 방법으로, 생성자 Car()에서 Car(String name, int number)를 호출하는 것이죠.
    같은 의미로 생성자 Car(String name)에서도 Car(String name, int number)를 호출합니다.

    this(0);이 가능 하려면 생성자 중 Car(int number)가 있어야 하겠죠.

    정리하자면, this( ... ) 는 생성자를 호출하는 방법으로, 위의 코드에서 this(0) 처럼 없는 형태의 생성자는 호출할 수 없습니다.
    이러한 문법은 생성자가 여러개일 경우 생성자를 간편히 만들기 위함인 데요.
    마지막에는 결국 제대로 값을 넣어주어야 하므로 Car(String name, int number)와 같이 내부에 값을 넣어주는 코드가 있어야 합니다.

    this(name, number);가 안되는 이유는 자기자신을 호출한다는 의미가 되어버려 무한루프가 되겠죠.
    실제 발생하는 오류도 Command failed: /Car.java:12: error: recursive constructor invocation로 나옵니다.

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.