반응형
super까지 왔다. 상속을 했다는 얘기지...
얘는 왜 하는가??? 어따 쓰는 놈인가.. 필요한가?
Test2 클래스를 Test3이 상속 받았다고 치자.
class Test2{
int sum = 0;
int num;
static int tot_sum = 0;
void calc(int amt){
sum = sum + amt;
tot_sum = tot_sum + amt;
}
static int getTotSum(){
return tot_sum;
}
}
int sum = 0;
int num;
static int tot_sum = 0;
void calc(int amt){
sum = sum + amt;
tot_sum = tot_sum + amt;
}
static int getTotSum(){
return tot_sum;
}
}
이 놈이 Test3
public class Test3 extends Test2{
int bal;
Test3(int num, int bal) {
this.bal = bal;
}
}
지금은 Test2를 상속받는데 super고 나발이고 필요가 없다.
이런 경우야 필요 없는데 근데 만약에 Test2에 생성자가 있다고 치자.
class Test2{
int sum = 0;
int num;
static int tot_sum = 0;
Test2(int num){
this.num = num;
}
void calc(int amt){
sum = sum + amt;
tot_sum = tot_sum + amt;
}
static int getTotSum(){
return tot_sum;
}
}
int sum = 0;
int num;
static int tot_sum = 0;
Test2(int num){
this.num = num;
}
void calc(int amt){
sum = sum + amt;
tot_sum = tot_sum + amt;
}
static int getTotSum(){
return tot_sum;
}
}
그리고 Test3에서 그냥 상속받고 super 안 했다고 하면
예쁜 에러에 직면하게 된다. 굳ㅋ
자바 컴파일러가 컴파일을 할때 생성자의 첫 번째 명령문이 슈퍼클래스의 생성자 호출문이 아니면 자동으로슈퍼클래스의
빈 생성자 호출문을 추가 하기 때문이라고 한다.
마음씨 좋은 양반이 Test2를 만들때 빈 껍따구 생성자를 만들어 줬음 에러는 안 날 꺼시다.
Test2(){
}
이렇게 말이지.. 추가가 되어 있음 얼마나 좋을까..
그런데 상속받는 주제에 슈퍼클래스한테 이거 추가해 주삼! 이라고 할 수는 없는 노릇이니 스스로 극복해야 한다.
그래서 Test3은 이렇게 바뀌어야 한다.
public class Test3 extends Test2{
int bal;
Test3(int num, int bal) {
super(num);
this.bal = bal;
}
}
보다시피.. 별거는 없다.
슈퍼클래스의 이름으로 호출 안 하고 super 라고 호출한다.
상속받기 힘들다. 아무나 받는게 아니군...
반응형
댓글