Java에서 super 키워드와 super() 호출은 관련이 있지만 사용 목적이 다르다. 두 구문은 모두 상속 구조에서 사용되며, 자식 클래스가 부모 클래스와 상호작용할 때 필요하다.
super() 메서드 : 상위 클래스의 생성자 호출
super : 상위 클래스의 객체 호출
상속 관계의 인스턴스 변수가 같은 이름의 변수일 때 이를 구분하기 위해 사용
만약 키워드를 사용하지 않을 시, 자바 컴파일러는 자신이 속한 인스턴스 객체의 멤버를 먼저 호출하게 된다.
즉, 상위 클래스의 변수를 참조해야 할 경우 super 키워드를 통해 상위 클래스 객체의 멤버 값을 사용 가능
* super와 this의 차이점
super : 상위 클래스 객체의 멤버 값을 참조하기 위해 사용
this : 인스턴스 변수와 매개 변수를 구분하기 위해 사용하며 자기 자신을 지칭
this()와 유사하게 생성자 안에서만 사용 가능하며, 반드시 첫 줄에 작성해야 한다.
만약 첫 줄에 super()가 없는 경우, 컴파일러가 생성자의 첫 줄에 자동으로 super()를 삽입하여 실행한다.
예시
class Parent {
Parent() {
System.out.println("부모 클래스의 생성자 호출");
}
void parentMethod() {
System.out.println("부모 클래스의 메서드");
}
}
class Child extends Parent {
Child() {
//super()
super(); // 부모 클래스의 생성자 호출
System.out.println("자식 클래스의 생성자 호출");
}
void childMethod() {
//super
super.parentMethod(); // 부모 클래스의 메서드 호출
System.out.println("자식 클래스의 메서드");
}
}
public class Test {
public static void main(String[] args) {
Child c = new Child();
c.childMethod();
}
}
이 예제에서 Child 클래스의 생성자에서 super()를 사용하여 부모 클래스 Parent의 생성자를 호출한다. 또한, Child 클래스에서 super.parentMethod()를 사용하여 오버라이딩된 부모 클래스의 parentMethod 메서드에 접근한다.
[Spring/Java] 스프링의 의존성 주입 방식 (DI) (0) | 2024.04.04 |
---|---|
[객체 지향 프로그래밍] 소프트웨어 설계를 위한 다섯 가지 기본 원칙 : SOLID 원칙 (0) | 2024.04.04 |
[Java] final, static, static final (0) | 2024.04.04 |
[Java] Java의 Generic 타입 (0) | 2024.04.03 |
[Java] this와 this()의 역할과 차이 (0) | 2024.04.02 |
댓글 영역