
🎃 생성자 간 호출 가능한 조건
<에러발생 예>
Car(String color) {
door = 5; //첫번째 줄
Car(color, "auto", 4); //에러1. 생성자의 두 번째 줄에서 다른 생성자 호출
} //에러2. this(color, "auto", 4);로 해야함
- 생성자 Car2()에서 또 다른 생성자 Car2(String color, String gearType, int door)를 호출함
- 생성자간의 호출에는 생성자의 이름 대신 this를 사용해야만 하므로 'Car2' 대신 'this'를 사용
- 생성자 Car2()의 첫째 줄에서 호출하였다는 점을 유의
Car2() {
color = "white";
gearType = "auto"
door = 4;
}
<↓ 간략히>
Car2() {
this("white", "auto", 4);
}
:아래 코드는 생성자 Car2(String color, String geartype, int door)를 활용해서 더 간략히 한 것
Car2 c1 = new Car2();와 같이 생성자 Car2()를 사용해서 Car2인스턴스를 생성한 경우에,
인스턴스변수 color는 "white", gearType은 "auto", door는 4로 초기화 되도록 함
🔔 주의
this : 인스턴스 자신을 가리키는 참조변수
-인스턴스의 주소가 저장되어 있음
-모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재
this( ) , this(매개변수) : 생성자
-같은 클래스의 다른 생성자를 호출할 때 사용
this와 this( )는 완전히 다른 것
Car(String c, String g, ind d) {
color = c;
gearType = g;
door = d;
}
color = c;는 생성자의 매개변수로 선언된 지역변수 c의 값을 인스턴스변수 color에 저장함Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에 인스턴스 변수 앞에 this를 사용
this.color는 인스턴스 변수이고, color는 생성자의 매개변수로 정의된 지역변수로 서로 구별 가능
this.color = color; 대신에 color = color로 쓰면 둘 다 지역변수로 간주
생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에 매개변수이름을 인스턴스변수의 이름과 다르게 하는 것보다 this를 사용해서 구별되도록 하는 것이 좋음
this는 참조변수로 인스턴스 자신을 가리킴
참조변수를 통해 인스턴스 멤버에 접근할 수 있는 것처럼 this로 인스턴스변수에 접근할 수 있음
하지만, this를 사용할 수 있는 것은 인스턴스멤버 뿐