public class ConstructorDemo {
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
에러가 나지 않는다.
ConstructorDemo 객체를 생성할 때 자동으로 생성자를 만들어주기 때문이다. - 기본생성자
public class ConstructorDemo {
public ConstructorDemo(int param1) {}
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
위 예제는 에러 발생!
파라미터가 있다는 것은 기본 생성자가 아니기 때문
해결 할 수 있는 방법
기본 생성자와 개발자가 직접 만든 생성자 2개
public class ConstructorDemo {
public ConstructorDemo(){}
public ConstructorDemo(int param1) {}
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo();
}
}
에러가 발생
상위 클래스인 Calculator 의 생성자가 존재하지 않아서 생기는 에러
class Calculator {
int left, right;
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
public void setOprands(int left, int right) {
this.left = left;
this.right = right;
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
class SubstractionableCalculator extends Calculator {
public SubstractionableCalculator(int left, int right) {
this.left = left;
this.right = right;
}
public void substract() {
System.out.println(this.left - this.right);
}
}
public class CalculatorConstructorDemo5 {
public static void main(String[] args) {
SubstractionableCalculator c1 = new SubstractionableCalculator(10, 20);
c1.sum();
c1.avg();
c1.substract();
}
}
오류 해결 방법
Calculator 클래스에 명시적으로 생성자를 만들어준다.
public Calculator(){
}
상위클래스와 하위클래스의 생성자가 같다면(중복) super로 변경해준다.
SubstractionableCalculator 클래스의 생성자를 아래처럼 변경해준다.
public SubstractionableCalculator(int left, int right) {
super(left, right); // 부모클래스의 생성자
//초기화 코드 ( super 호출 후 사용해야한다. 안할시 오류발생)
}
'Java' 카테고리의 다른 글
overloading (0) | 2023.03.08 |
---|---|
overriding (0) | 2023.03.07 |
상속 (0) | 2023.03.07 |
생성자 (0) | 2023.03.07 |
유효범위 (0) | 2023.03.07 |