본문 바로가기
TechNical/JAVA

super는 뭐 하는 놈일까

by 강멍멍이 2011. 4. 12.
반응형

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;
 }
}

이 놈이 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;
 }
}

그리고 Test3에서 그냥 상속받고 super 안 했다고 하면
예쁜 에러에 직면하게 된다. 굳ㅋ

자바 컴파일러가 컴파일을 할때 생성자의 첫 번째 명령문이 슈퍼클래스의 생성자 호출문이 아니면 자동으로슈퍼클래스의
빈 생성자 호출문을 추가 하기 때문이라고 한다.

마음씨 좋은 양반이 Test2를 만들때 빈 껍따구 생성자를 만들어 줬음 에러는 안 날 꺼시다.

Test2(){
  
 }

이렇게 말이지.. 추가가 되어 있음 얼마나 좋을까..

그런데 상속받는 주제에 슈퍼클래스한테 이거 추가해 주삼! 이라고 할 수는 없는 노릇이니 스스로 극복해야 한다.
그래서 Test3은 이렇게 바뀌어야 한다.


public class Test3 extends Test2{
 int bal;
 Test3(int num, int bal) {
  super(num);
  this.bal = bal;
  
 }
}

보다시피.. 별거는 없다.
슈퍼클래스의 이름으로 호출 안 하고 super 라고 호출한다.

상속받기 힘들다. 아무나 받는게 아니군...
반응형

댓글