06-36.1 생성자 오버로딩이란?
Def) 생성자 오버로딩: 생성자도 메서드와 마찬가지로 여러 개를 선언할 수 있다.
- 매개변수의 수와 형만 다르면 생성자를 여러개 선언할 수 있다.
<hide/>
package javaStudy;
public class Car{
// 형 + 필드명
String name;
int number;
public Car(String name) {
this.name = name;
}
}
- 34장에서 Car클래스에 이름을 받는 생성자를 하나 추가했다.
- 생성자를 추가한 뒤 Car객체를 생성할 때 "소방차"라는 이름 넣어서 생성했다.
06-36.2
Ex)
<hide/>
package javaStudy;
public class CarExam3 {
public static void main(String[] args) {
Car c1 = new Car("소방차");
Car c2 = new Car();
}
}
Note) 출력 결과: The constructor Car(String) is undefined
- 위 코드에서 정의한 생성자가 하나 있고 기본 생성자가 만들어지지 않기 때문에 컴파일 에러가 난다.
- 그럼 기본 생성자를 아예 사용할 수 없을까? No!
- 셍성자도 여러 개 정의할 수 있다.
- 기본 생성자로도 Car객체를 만들고 싶다면 기본 생성자를 직접 정의해두면 된다.
Def) 기본 생성자: 디폴트로 아무 값도 받지않는 생성자를 말한다.
06-36.3 기본생성자 만들기
Ex)
<hide/>
package javaStudy;
public class Car{
// 형 + 필드명
String name;
int number;
public Car(String name) {
this.name = name;
}
public Car() {
}
}
Note) 기본 생성자를 정의하면 CarExam3에 있던 에러가 사라진다.
- 생성자도 이렇게 오버로딩이 가능하다.
06-36.4
Ex)
<hide/>
package javaStudy;
public class Car{
// 형 + 필드명
String name;
int number;
public Car(String name) {
this.name = name;
this.number = number;
}
public Car() {
}
}
Note) 이름 외에 번호도 받을 수 있도록 생성자를 정의했다.
- 필드 name에 매개변수로 받아온 name값을 넣는다
- 필드 numbeer에 매개변수로 받아온 number 값을 넣는다.
- 새로 만들 생성자를 사용해서 Car객체를 만들어보자.
06-36.5 Car객체 만들기
Ex)
<hide/>
package javaStudy;
public class Car{
// 형 + 필드명
String name;
int number;
public Car(String name) {
this.name = name;
}
public Car() {
// this.name = "이름없음";
// this.number = 0;
this("이름없음", 0 );
}
public Car(String name, int number) {
this.name = name;
this.number = number;
}
}
Note)
- this.name = "이름없음" 과 this.number = 0;은 같은 코드이므로 다음과 같이 바꿔준다.
-> this("이름 없음", 0)
-> this에 괄호를 붙이면 자기 자신의 생성자를 의미한다.
-> 자기 자신의 생성자에 "이름 없음"과 0을 넣어 호출하면 Car객체에 기본 생성자를 호출했을 때
-> String값과 int값을 가진 생성자를 호출할 것이다.
- 생성자 Car()에서 this("이름 없음", 0)는 Car(String name, int number)를 호출하는 것이다.
- 마찬가지로 Car(String name) 에서 { this.name = name; } 대신에 this(name, 0)으로 바꿔주면
- Car(String name, int number)를 호출한다.
- 만약 this(0)이 가능하려면 생성자 중에서 Car(int number)가 있어야 한다.
- 따라서 this()는 생성자를 호출하는 방법으로 정의되지 않은 생성자는 호출할 수 없다.
- 생성자가 여러 개인 경우 생성자를 간편히 만들게 해준다.
- 생성자 내에서 해당 클래스의 다른 생성자를 호출한다.
06-36.6. 클래스 Car는 name과 number를 필드로 가진다. Car 클래스에 다음과 같인 세 가지 종류의 생성자를 만들라.
(1) 매개변수를 받지 않는 생성자: name은 이름 없음, number은 0으로 초기화
(2) 매개변수로 String만 입력 받는 생성자: name을 입력받은 문자열로 지정하고 number는 0으로 초기화 한다.
(3) 매개변수로 String과 int를 입력받는 생성자: name과 number를 입력받은 값으로 초기화한다.
Ex)
<hide/>
package javaStudy;
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;
}
}
<hide/>
package javaStudy;
public class CarExam {
public static void main(String[] args) {
Car car1 = new Car();
Car car2 = new Car("자동차");
Car car3 = new Car("자동차", 1234);
System.out.println(car1.name + " , " +car1.number );
System.out.println(car2.name + " , " +car2.number );
System.out.println(car3.name + " , " +car3.number );
}
}
Note) 반복하는 코드는 직접 사용하지 않고 this()를 이용해서 다른 생성자를 호출해야한다.
'Java > 모두의 자바' 카테고리의 다른 글
Chapter 07-37 상속이란? (0) | 2022.02.08 |
---|---|
Chapter 06-36 패키지 (0) | 2022.02.07 |
Chapter 06-34 메서드 오버로딩 (0) | 2022.02.07 |
Chapter 06-33 this (0) | 2022.02.07 |
Chapter 06-32 생성자 (0) | 2022.02.07 |