Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 super 키워드 완벽 정리: 부모 클래스 접근의 핵심

자바에서 super 키워드는 상속 관계에 있는 자식 클래스가 부모 클래스의 멤버(변수, 메서드, 생성자)에 접근할 수 있도록 해주는 중요한 예약어입니다. 메서드 오버라이딩을 사용할 때 특히 유용하며, 객체지향 프로그래밍의 상속 개념을 제대로 활용하려면 반드시 이해해야 하는 요소입니다.

super 키워드의 주요 특징

  • super 변수는 직계 부모 클래스(immediate parent class)의 인스턴스를 참조합니다.
  • super 변수를 사용하여 부모 클래스의 메서드를 호출할 수 있습니다.
  • super()는 부모 클래스의 생성자 역할을 하며, 반드시 자식 클래스 생성자의 첫 번째 줄에 위치해야 합니다.

오버라이딩된 메서드의 부모 클래스 버전을 호출하고자 할 때 super 키워드를 사용합니다. 즉, 자식 클래스에서 같은 이름의 메서드를 재정의했더라도 super를 통해 원래 부모 클래스의 구현 내용을 그대로 실행할 수 있습니다.

예제 코드

다음 예제는 Dog 클래스가 Animal 클래스를 상속받고, move() 메서드를 오버라이딩하면서 super 키워드로 부모 클래스의 메서드를 호출하는 모습을 보여줍니다.

class Animal {
    public void move() {
        System.out.println("Animals can move");
    }
}
class Dog extends Animal {
    public void move() {
        super.move(); // 부모 클래스의 메서드 호출
        System.out.println("Dogs can walk and run");
    }
}
public class TestDog {
    public static void main(String args[]) {
        Animal b = new Dog(); // Animal 타입 참조변수, Dog 객체
        b.move(); // Dog 클래스의 메서드 실행
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Animals can move
Dogs can walk and run

코드 분석

Animal b = new Dog();처럼 부모 클래스 타입의 참조변수로 자식 클래스 객체를 생성하면, 실제 실행되는 메서드는 객체의 실제 타입(Dog)에 따라 결정됩니다. 따라서 b.move() 호출 시 Dog 클래스의 move() 메서드가 실행되고, 그 안에서 super.move()가 먼저 호출되어 부모 클래스인 Animal의 move() 메서드가 출력된 후, Dog 클래스의 문장이 이어서 출력됩니다.

추가 팁: super() 생성자 호출

super 키워드는 메서드뿐만 아니라 생성자 호출에도 사용됩니다. 자식 클래스의 생성자에서 super(); 또는 super(매개변수); 형태로 작성하면 부모 클래스의 생성자가 먼저 실행됩니다. 만약 명시적으로 작성하지 않으면 컴파일러가 자동으로 부모 클래스의 기본 생성자를 호출하므로, 부모 클래스에 매개변수가 있는 생성자만 존재한다면 반드시 super()를 직접 작성해야 컴파일 오류를 피할 수 있습니다.