- "생성자" : 클래스와 이름이 같은 메소드
- 클래스가 생성될 때 자동으로 생성자가 제일 먼저 실행되도록 함
class Calculator {
int left, right;
public Calculator(int left, int right) {
this.left = left;
this.right = right;
}
}
- "기본 생성자" : 클래스 이름가 같으면서 매개변수가 없는 메소드
- 사용자가 생성자를 자동으로 정의하지 않으면, 기본 생성자가 자동으로 생성됨
public class ConstructorDemo {
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
public class ConstructorDemo {
public ConstructorDemo(int param1) {}
// 매개변수가 있는 생성자
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
// 정의된 생성자가 존재하기 때문에 기본 생성자가 생성되지 않아서 매개변수가 없는 객체를 생성하면 에러가 발생함
}
}
public class ConstructorDemo {
public ConstructorDemo() {}
// 매개변수가 없는 생성자
public ConstructorDemo(int param1) {}
// 매개변수가 있는 생성자
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
- 매개변수가 있는 생성자와 함께 하위 클래스를 선언하면
하위 클래스의 생성자를 호출하기 전에 상위 클래스의 기본 생성자를 자동으로 호출하기 때문에
상위 클래스는 생성자가 아예 없거나(기본 생성자 자동으로 생성) 기본 생성자가 있어야 함
(단, super( )를 사용할 경우 예외)
- super( ) : 상위 클래스의 생성자
- 상위 클래스의 생성자와 하위 클래스의 생성자 형태가 같을 때
하위 클래스의 생성자 안에 super( )로 작성
- 하위 클래스의 초기화 코드는 항상 super( )가 맨 앞에 위치해야 함
public SubstractionableCalculator(int left, int right) {
super(left, right);
}