본문 바로가기
Java/Java의 정석

[Java의 정석] 상속과 오버라이딩

by Dev_Green 2023. 2. 14.

1-1. 상속(inheritance)

상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

상속을 통해서 클래스를 작성하면 보다 적응 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.

1-2. 상속의 특성

  • 상속의 대상은 멤버(변수와 메서드)이다. 생성자와 초기화 블럭은 상속되지 않는다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 

1-3. Object 클래스 - 모든 클래스의 조상

Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상 클래스이다.

 

다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object 클래스로부터 상속을 받는다. 만일 다른 클래스로부터 상속을 받는다고 하더라도 상속계층도를 따라 조상의 조상을 따라 계속 올라가다 보면 결국 마지막 최상위 조상은 Object 클래스일 것이다.  

 

따라서 자바의 모든 클래스들은 Object 클래스의 멤버들을 상속받기 때문에 Object 클래스에 정의된 멤버들을 사용할 수 있다.

* toString(), equals() 등

2-1.  오버라이딩(overriding)

오버라이딩이란, 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것.

상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우 조상의 메서드를 오버라이딩한다.

2-2. 오버라이딩의 조건

  • 선언부가 일치해야 한다.
    • 즉, 메서드 이름, 매개변수, 반환타입이 같아야 한다.
  • 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  • 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
    • 단순히 개수의 문제가 아니라 예외의 '범위'가 관건

2-3. super() - 조상 클래스의 생성자

자손 클래스를 생성하면, 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스가 생성된다. 자손 클래스의 멤버가 조상 클래스의 멤버를 사용할 수도 있으므로 조상의 멤버들을 먼저 초기화 해놓기 위해 생성자의 첫 줄에서 조상클래스의 생성자를 호출한다.

 

자손 클래스의 생성자의 첫줄이 생성자가 아니라면 컴파일러가 자동으로 'super()'를 생성자의 첫 줄에 넣어 준다.