728x90
반응형
부모 class 에 생성자가 있는 채로 상속을 받았다면, 그 부모 class 를 상속받는 자식 class도 생성자를 가져와야한다.
java에서는 그렇게 강제되어 있다고 하는데여
class Cal{
int v1, v2;
Cal(int v1, int v2){
this.v1=v1; this.v2=v2;
}
}
//에러남
class Cal3 extends Cal{
}
public class InheritanceApp {
public static void main(String[] args) {
Cal c = new Cal(2, 1);
Cal3 c3 = new Cal3();
}
}
이렇게 부모 class 인 Cal 에 생성자가 있으면 자식 class에 오류가 난다.
오류를 해결해주기 위해서는 자식 class에도 부모 class의 생성자를 끌고온 생성자를 똑같이 써주어야한다.
eclipse는 이걸 알아서 자동으로 만들어준다. 한 번 보자면
class Cal{
int v1, v2;
Cal(int v1, int v2){
this.v1=v1; this.v2=v2;
System.out.println("Cal1"); //Cal1
}
public int sum() {return v1+v2;}
}
class Cal3 extends Cal{
Cal3(int v1, int v2) {
super(v1, v2);//Cal1 위의 상속자를 그대로 copy 했기 때문에
System.out.println("Cal3"); //Cal3
}
public int minus() {return this.v1-v2;}
}
public class InheritanceApp {
public static void main(String[] args) {
Cal c = new Cal(2, 1);
Cal3 c3 = new Cal3(2, 1);
System.out.println(c3.sum()); // 3
System.out.println(c3.minus()); // 1
}
}
Cal3이라는 상속자를 자동으로 만들어주고, 이때 super을 사용해서 Cal에 있는 변수를 그대로 사용한다고까지 표시를 해준다.
그리고 나서 아래 main 메소드에 실행 코드까지 적어주고 나서 디버그를 걸고 코드를 돌려봤더니
Cal1
Cal1
Cal3
3
1
이라는 결과값이 나왔다.
처음에 저 두번째 Cal1이 대체 왜 나오는건가 했는데
Cal 생성자를 super을 통해서 그대로 가져왔기 때문에 그 안의 내용이 실행되는거였다
이해해서 뿌듯하당
728x90
반응형
'Java > Java 상속' 카테고리의 다른 글
this & super (0) | 2020.12.01 |
---|---|
Overriding vs Overloading (0) | 2020.12.01 |
Overriding (0) | 2020.12.01 |
Java에서 상속 (0) | 2020.12.01 |