[Java] 심화 - 상속, super 키워드

이지연·2025년 12월 19일

개요

아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함


상속(Inheritance)의 개념

상속이란 부모 클래스의 변수와 메서드를 자식 클래스가 물려받는 것임.
extends 키워드를 사용해서 부모 클래스의 기능을 자식 클래스에서 그대로 활용할 수 있는 구조임.

이 방식은 코드 재사용성을 높여주고, 확장이나 유지보수가 용이해지는 장점이 있음.


부모 클래스와 자식 클래스의 기본 구조

package C03Inheritance;

public class C01Inheritance extends Parents {
    int b = 20;

    public static void main(String[] args) {
        C01Inheritance c1 = new C01Inheritance();

        // 부모클래스 변수 상속
        System.out.println(c1.a); // 부모 클래스 변수
        System.out.println(c1.b); // 자식 클래스 변수

        // 부모클래스 메서드 상속
        c1.m1(); // 오버라이딩된 메서드
        c1.m2(); // 자식 클래스 고유 메서드

        // private은 접근 불가
        // c1.c; // 오류 발생
    }

    @Override
    public void m1() {
        System.out.println("자식 클래스의 m1임. 오버라이딩함.");
    }

    public void m2() {
        System.out.println("자식 클래스의 m2임.");
    }
}

class Parents {
    int a = 10; // default 접근제어자 → 같은 패키지 내 접근 가능
    private int c = 30; // private → 클래스 내부에서만 접근 가능

    public void m1() {
        System.out.println("부모 클래스임.");
    }
}

핵심 요약

  • extends → 부모 클래스를 상속받을 때 사용하는 키워드임.
  • 부모의 변수와 메서드를 자식이 그대로 사용 가능함.
  • private상속은 되지만 접근 불가능함.
  • 부모의 메서드를 자식이 다시 정의할 수 있는데, 이것이 바로 오버라이딩(Overriding)임.

오버로딩(Overloading) vs 오버라이딩(Overriding)

구분설명특징
오버로딩같은 메서드명을 가지되 매개변수를 다르게 정의컴파일 시점 판별
오버라이딩부모 메서드를 자식이 재정의런타임 시점 판별

@Override 어노테이션을 붙이면, 해당 메서드가 부모로부터 오버라이드된 것임을 명시적으로 알 수 있음.
코드의 안정성과 가독성을 위해 사용하는 것이 좋음.


super 키워드

super는 자식 클래스에서 부모 클래스의 변수나 메서드를 접근할 때 사용하는 키워드임.
자식 클래스와 부모 클래스에 같은 이름의 멤버가 있을 경우 구분용으로 쓰는 것임.

package C03Inheritance;

public class C02SuperKeyword extends SuperParents {
    int a = 20;

    public static void main(String[] args) {
        C02SuperKeyword c = new C02SuperKeyword();
        c.display();
    }

    public void display() {
        System.out.println("자식의 변수 a : " + this.a);
        System.out.println("부모의 변수 a : " + super.a);
    }

    public C02SuperKeyword() {
        super(10); // 부모 생성자 호출
        this.a = 20;
    }
}

class SuperParents {
    int a = 10;

    public SuperParents(int a) {
        this.a = a;
    }
}

super()와 this()의 차이

  • super() → 부모 클래스의 생성자를 호출하는 역할임.
  • this() → 같은 클래스 내의 다른 생성자를 호출할 때 사용함.

자식 객체 생성 시 부모 객체도 함께 생성되지만, 부모 클래스에 기본 생성자가 없는 경우 super(매개변수)를 통해 명시적으로 호출해야 함.


키워드 정리표

키워드설명
this현재 객체를 참조하는 키워드임.
super부모 객체를 참조하는 키워드임.
this()자신의 생성자를 호출하는 문법임.
super()부모 생성자를 호출하는 문법임.

어노테이션(@Override) 참고

@Override는 단순히 꾸며주는 문법이 아니라, 실제로 컴파일러가 오버라이드 여부를 검증해주는 기능임.
Java 기본 문법에서는 꼭 필수는 아니지만, 실무나 스프링(Spring) 환경에서는 매우 중요한 표시 요소가 됨.

profile
Eazy하게

0개의 댓글