발전을 위한 기록

[Java] 자바 상속 이해하기 본문

프로그래밍/자바

[Java] 자바 상속 이해하기

릴릴2 2024. 2. 14. 23:43

💻 상속(Inheritance)

상속이란, 한 클래스가 다른 클래스의 속성과 메소드를 물려받는 기능을 말합니다. 자바에서는 extends 키워드를 사용하여 상속을 구현합니다. 상속을 통해 기존 코드를 재사용하고 확장하여, 보다 효율적으로 프로그램을 개발할 수 있습니다.


💻 상속의 장점

코드 재사용

  • 이미 작성된 클래스를 상속받아 새로운 클래스를 만들면, 코드를 재작성 하지 않고 기느을 확장할 수 있습니다. 

유지보수 용이

  • 상위 클래스의 코드를 수정하면, 상속받은 모든 하위 클래스에 자동 적용됩니다.

계층적 분류

  • 상속을 통해 클래스 간의 계층을 만들 수 있으며, 프로그램의 구조를 명확하게 이해하는데 도움이 됩니다. 

예제

1. 기본 상속

// 부모 클래스
class Parent {
    void show() {
        System.out.println("부모 클래스의 메소드입니다.");
    }
}

// 자식 클래스, Parent 클래스를 상속받음
class Child extends Parent {
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();  // 부모 클래스에서 상속받은 메소드 호출
    }
}
    • Child 클래스는 Parent 클래스로부터 show 메소드를 상속받습니다.
    • Child 클래스의 인스턴스를 생성하고, 상속받은 show 메소드를 호출하여 "부모 클래스의 메소드입니다."를 출력합니다.

출력결과

부모 클래스의 메소드입니다.

2. 메소드 오버라이딩

// 부모 클래스
class Parent {
    void show() {
        System.out.println("부모 클래스의 메소드입니다.");
    }
}

// 자식 클래스, Parent 클래스를 상속받음
class Child extends Parent {
    // 부모 클래스의 show 메소드 오버라이딩
    void show() {
        System.out.println("자식 클래스에서 오버라이딩된 메소드입니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();  // 오버라이딩된 메소드 호출
    }
}
  • Child 클래스에서는 Parent 클래스의 show 메소드를 오버라이딩하여 새로운 메시지를 출력하도록 정의합니다.
  • 이로 인해 Child 클래스의 인스턴스를 통해 show 메소드를 호출하면, "자식 클래스에서 오버라이딩된 메소드입니다."가 출력됩니다.'

출력결과

자식 클래스에서 오버라이딩된 메소드입니다.

3. 'super' 키워드 사용

// 부모 클래스
class Parent {
    void show() {
        System.out.println("부모 클래스의 메소드입니다.");
    }
}

// 자식 클래스, Parent 클래스를 상속받음
class Child extends Parent {
    void show() {
        super.show();  // 부모 클래스의 show 메소드 호출
        System.out.println("자식 클래스에서 오버라이딩된 메소드입니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();  // 부모 클래스의 메소드와 오버라이딩된 메소드 둘 다 호출
    }
}
  • super 키워드는 상속 관계에서 같은 이름의 변수일 때 구분하기 위해 사용합니다.
  • Child 클래스의 show 메소드에서 super.show()를 호출함으로써 부모 클래스의 show 메소드를 실행합니다.
  • "자식 클래스에서 오버라이딩된 메소드입니다."를 출력하여, 부모 클래스의 메소드와 자식 클래스의 오버라이딩된 메소드 둘 다 실행되는 것을 보여줍니다.

출력결과

부모 클래스의 메소드입니다.
자식 클래스에서 오버라이딩된 메소드입니다.
728x90