이전 걸음까지 상속과 관련이 있는 내용들을 계속해서 공부를 하고 있습니다. 이번에는 상속과 관련이 있는 명령어를 공부를 하려고 합니다. 이전 객체와 class를 할 때 자기 자신을 나타내는 this를 배운 기억이 있으실 겁니다. 이번에는 this와 비슷하지만 상속 개념이 필요한 명령어를 배워 보겠습니다.
이번 걸음에서는 super라는 명령어를 배워보도록 하겠습니다. super는 상속과 어떻게 연관이 있는지 공부를 하도록 하겠습니다. 이번 걸음을 통해서 super에 대해서 확실히 알 수 있는 걸음이 되실 수 있습니다.
super란과 super에 사용한 예제 및 방법 그리고 마지막으로 super를 꼭 사용을 해야 하는 경우를 이번 걸음에서 설명을 하도록 하겠습니다. 종종 사용되고 사용을 해야 하기 때문에 이번 걸음을 끝까지 꼭 봐주세요.
super란?
super는 this와 비슷하지만 다른 부분이 있습니다. 우선 같은 점은 class 안에 모든 것을 뜻하게 됩니다. 그래서 명령어를 이용해서 내 class안에 속성이나 메소드의 접근이 가능하게 됩니다. super는 this와 비슷하지만 다르게 부모class의 속성과 메소드를 가져다가 사용을 할 수 있게 합니다. 일반적으로 자식 class내용과 중복이 되지 않으면 super를 사용하지 않고 사용이 가능도 합니다.
super code 예제
class A{
int a;
void abc(){
System.out.println("A");
}
}
class B extends A{
int a;
void def(){
this.a = 10;
super.a = 20;
System.out.println(this.a+","+super.a);
}
void kor(){
this.abc(); //this
super.abc();//super
abc(); // this X, super X
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
b.def();
b.kor();
}
}
위에 소스를 보면 super는 부모를 뜻하고 부모의 변수나 메소드를 접근을 할 수 있습니다. 하지만 자식 class에서 부모와 같은 변수가 없거나 같은 이름의 메소드가 없으면 this나 아무것도 사용을 하지 않아도 부모의 변수나 메소드 호출이 가능합니다.
super 꼭 필요한 경우
super는 자식과 같은 부분이 없다면 사용을 하지 않아도 됩니다. 하지만 꼭 써야 하는 경우가 있습니다.
부모에 생성자가 매개변수를 받아야 생성이 되는 경우
부모와 똑같은 이름으로 변수를 선언을 한경우
※부모와 똑같은 이름으로 메소드를 선언을 하면 Method Overriding이 되기 때문에 super와는 관련이 없습니다.
위에 설명을 보면 부모 class의 생성자가 default 생성자가 아닌 경우 자식 class B처럼 꼭 해줘야 Error가 발생을 하지 않습니다.
꼭 참고 해주세요. 또한 같은 변수는 this와 super로 나눠서 사용해야 a 두개의 변수 사용이 가능 합니다.