[Java] 기초 - 상속(inheritance)

J._.n·2024년 7월 21일

[Java]

목록 보기
9/10
post-thumbnail

상속(inheritance)란?

기존의 클래스가 가지고 있는 멤버(필드, 메서드)들을 새로 작성할 클래스에서 직접 만들지 않고 사용하는 것이다.

장점

  • 보다 적은 양의 코드로 새로운 클래스를 작성 가능
  • 코드를 공통적으로 관리하기에 코드의 추가 및 변경 용이
  • 코드의 중복 제거를 통해 프로그램의 생산성과 유지보수에 증가

상속 구현 방법

public class Child extends Parent {
//   필드
//   생성자
//   메서드
}

클래스 간의 상속시 extends 키워드를 사용한다.
Child 클래스는 Parent를 상속받은 자식 클래스이고 이 두 클래스는 서로 상속 관계에 있다고 표현한다. 상속해주는 클래스를 조상 클래스라고 하며 상속 받는 클래스를 자손 클래스라고 한다.

다음과 같은 용어로도 불린다.
조상 클래스 : 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스 : 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스

특징

  1. 모든 클래스는 Object클래스의 후손
    Object 클래스가 제공하는 메서드를 오버라이딩하여 상위 메서드를 재구현 할 수 있다.
  2. 부모 클래스의 생성자, 초기화 블록은 상속 되지 않는다.
    자식 클래스 생성 시, 부모 클래스 생성자가 먼저 호출되고, 그 이후에 자식 클래스 생성자가 호출된다.
    자식 클래스 생성자에서 부모 클래스의 생성자 호출시 super() 를 통해 호출한다.
  3. 부모의 private 멤버의 경우 상속은 되지만 직접적으로 접근할 수 없다.
    super() 키워드 혹은 부모 클래스의 getter/setter 메서드를 이용해 접근해야 한다.

상속된 클래스의 인스턴스 생성

Child ch = new Child();
ch 는 레퍼런스 변수로 heap 영역의 Child 클래스로 할당 받은 메모리주소를 가르킨다. 자식 클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스가 생성된다. 그렇기에 자식 클래스의 인스턴스가 부모 클래스의 멤버들을 사용할 수 있게 되는 것이다.

super()

this()메서드와 마찬가지로 super()역시 생성자로 super()의 경우 부모 클래스의 생성자를 호출하는데 사용한다. 자식 클래스의 멤버가 부모 클래스의 멤버를 사용하게 된다면 부모의 멤버들을 초기화 하기 위해 사용한다.
이때 자식 클래스 생성자의 첫 줄에 super()를 사용해야한다.

super.

부모 클래스의 상속받은 멤버를 참조하는데 사용되는 참조 변수로 멤버변수와 지역변수의 이름이 같은 때 this.를 붙여서 구별하듯이 부모 클래스로부터 상속받은 멤버와 자신의 멤버와 이름이 같을 때 super.을 붙여 구분할 수 있다.
부모 클래스로부터 상속받은 멤버도 자식 클래스 자신의 멤버이므로 super.대신 this.도 사용할 수 있지만, 부모 클래스의 멤버와 자식 클랫의 멤버가 중복 정의되어 서로 구별하는 경우에만 super.를 사용하는 것이 좋다.

profile
개발자를 꿈꾸는 대학생

0개의 댓글