public class Exam {
private int kor;
private int eng;
private int math;
public Exam() {
this(10,10,10);//오버로드 생성자 호출
}
//오버로드 생성자 (오버로드생성자 있으면 기본생성자 안만들어줌.기본생성자는 만들어주는게 좋음)
public Exam(int kor, int eng, int math) {
this.kor=kor;
this.eng=eng;
this.math=math;
}
public int total(int ext) {
return kor+eng+math;
}
public int total() {
return kor+eng+math;
}
public float avg() {
return total()/3.0f;
}
}
위 코드는 kor,eng,math 세 과목의 점수 변수를 가지며
total,avg을 구하는 메소드를 갖는 클래스이다.
위 클래스에는 생성자가 두 개인 것을 볼 수 있다.
첫 번째로
public Exam() {
this(10,10,10);//오버로드 생성자 호출
}
기본 생성자이다.
기본 생성자는 매개변수를 갖지 않는다.
기본 생성자에서는 오버로드 생성자를 호출해주었다.
오버로드 생성자는 다음과 같다.
public Exam(int kor, int eng, int math) {
this.kor=kor;
this.eng=eng;
this.math=math;
}
세 개의 매개변수를 갖는 오버로드 생성자이다.
- 오버로드란?
overloading : 과적재한다는 의미로, 한 메소드에서 파생되어 이름은 같지만 매개변수의 개수나 유형이 다른 것을 의미한다.
다시 본론으로 돌아와서
우리가 한 클래스에서 생성자를 만들어 주지 않는다면,
객체가 생성될때 기본생성자가 자동으로 생성된다.
하지만 매개변수를 갖는(오버로드) 생성자를 만들어준다면?
기본생성자를 자동으로 생성해주지 않는다.
그 때 Exam e = new Exam(); 과 같이 매개변수 없이 객체를 생성해준다면 에러가 발생하게 된다.
따라서 오버로드 생성자를 만들어줬다면 기본생성자도 만들어 주는 것이 좋은 습관이다.