상속과 생성자 (2/2)
코드 예제를 보며 상속과 생성자의 관계를 이해해보는 시간을 갖겠습니다.
●코드 예제
class cal1{
int left, right;
public void cal1(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);
}
}
class Sustractcal extends cal1 {
public Sustractcal(int left,int right) {
this.left = left;
this.right = right;
}
public void substract() {
System.out.println(this.left - this.right);
}
}
public class cal{
public static void main(String[] args) {
Sustractcal c1 = new Sustractcal(10,20);
c1.substract();
}
}
위의 코드는 오류를 발생시키지 않습니다.
왜냐하면 상속받은 Sustractcal 클래스의 생성자가 호출되면
부모 클래스의 기본 생성자를 먼저 호출하는데
부모 클래스의 생성자는 자동으로 생성되기 때문입니다.
●오류 코드 예제
class cal1{
int left, right;
//!-- 코드상 추가된 cal1의 생성자
public cal1(int left,int right) {
this.left = left;
this.right = right;
}
public void cal(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);
}
}
class Sustractcal extends cal1 {
public Sustractcal(int left,int right) {
this.left = left;
this.right = right;
}
public void substract() {
System.out.println(this.left - this.right);
}
}
public class cal{
public static void main(String[] args) {
Sustractcal c1 = new Sustractcal(10,20);
c1.substract();
}
}
왜냐하면 생성자를 직접 추가하였으므로,
자바가 자동으로 기본 생성자를 만들어주지 않았기 때문입니다.
따라서, 부모 클래스에 기본 생성자가 없기에 오류가 발생하는 것입니다.
●해결방법
따라서
기본 생성자인 public cal1() {}를 코드에 추가해주면 해결됩니다.
또는 부모 클래스와 자식 클래스의 생성자가 같은 모양일 경우
자식 클래스의 생성자 부분에
super 라는 것을 사용할 수 있습니다.
super 키워드는 부모 클래스를 의미합니다.
super() 는 부모 클래스 생성자를 의미합니다.
이런식으로 하위 클래스가 상위 클래스를 참조할 수 있게 하는 키워드가 super입니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[java] 9강 overloading 이란? (0) | 2021.11.16 |
---|---|
[java] 8강 Overriding 이란? (0) | 2021.11.13 |
[java 7강] 상속과 생성자 (1/2) (0) | 2021.11.11 |
[Android java] button 여러 속성 동시에 커스텀하는 방법 (0) | 2021.11.10 |
[Android java] AlertDialog 에 radius 주는 방법 (0) | 2021.11.09 |