상속의 중요한 개념 중, super라는 키워드가 있다. super키워드를 사용하면 부모를 참조할 수 있다.
상속에 대한 내용은 아래의 포스팅에 있다.
https://wook99.tistory.com/102
[자바/JAVA] 상속(Inheritance)
이번 포스팅은 자바 객체지향프로그래밍의 핵심 개념 중 하나인 상속에 대한 내용이다.기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 상속이라는 단어의 뜻 그대로 기
wook99.tistory.com
1. 사용
public class Parent {
public String value = "parent";
public void hello(){
System.out.println("Parent.hello");
}
}
public class Child extends Parent{
public String value = "child";
@Override
public void hello(){
System.out.println("Child.hello");
}
public void call(){
System.out.println("this value = " + this.value);
System.out.println("super value = " + super.value);
this.hello();
super.hello();
}
}
Child클래스는 Parent를 상속 받았고, 공통적으로 value라는 필드와 hello라는 메서드를 가지고 있다.
Child클래스의 객체를 생성하고 이를 이용하여 hello()메서드를 호출하면, Child클래스의 hello메서드가 호출된다.
하지만 부모 클래스의 hello()메서드를 사용하고 싶다면 어떻게 해야할까?
super키워드를 이용하여 hello()를 호출해주면 된다. 위의 코드를 보면 super.hello()를 통해 호출하는 것을 볼 수 있다.
즉, super는 부모에 대한 참조이며, super를 통해 부모 클래스에 접근하는 것이다.
2. 생성자
상속 관계의 인스턴스를 생성하면, 메모리 내부에는 자식과 부모 클래스가 각각 다 만들어진다.
Child를 만들면 Parent까지 함께 만들어진다는 것이다. 따라서 각각의 생성자도 모두 호출되어야 한다.
public class ClassA {
public ClassA(){
System.out.println("ClassA 생성자");
}
}
public class ClassB extends ClassA{
public ClassB(int a){
super();
System.out.println("ClassB 생성자 a = " + a);
}
public ClassB(int a, int b){
super();
System.out.println("ClassB 생성자 a = " + a + " b = " + b);
}
}
public class ClassC extends ClassB{
public ClassC(){
super(10,20);
System.out.println("ClassC 생성자");
}
}
public class SuperMain2 {
public static void main(String[] args) {
ClassC c = new ClassC();
}
}
/*실행 결과
ClassA 생성자
ClassB 생성자 a = 10 b = 20
ClassC 생성자
*/
ClassC는 B를, B는 A를 상속 받고 있다. 상속을 받으면 생성자의 첫줄에 super(...)를 사용해서 부모 클래스의 생성자를 호출해주어야 한다.
예외로, 부모 클래스의 생성자가 기본 생성자인 경우에는 super()를 생략할 수 있다. 자바가 넣어준다.this()에서도 이런 개념이 있었다.
핵심은 상속을 받으면 생성자의 첫줄에 super(...)를 사용해서 부모 클래스의 생성자를 호출해줘야 한다는 것이다.
결국, 상속 관계에서의 생성자 호출은 부모 -> 자식 순서로 실행된다는 것을 알 수 있다.
'JAVA' 카테고리의 다른 글
| [Java] Mapstruct - Entity와 DTO의 편리한 매핑 (1) | 2024.11.08 |
|---|---|
| [Java] Lombok 이란? (4) | 2024.11.08 |
| [자바/JAVA] 상속(Inheritance) (0) | 2024.06.14 |
| [자바/JAVA] final(상수) (3) | 2024.06.13 |
| [자바/JAVA] Static변수와 Static메서드 (0) | 2024.06.13 |