객체지향에서의 메서드 오버라이딩(over-riding)이란 무엇인가?

초월차선·2023년 2월 4일

Java

목록 보기
3/14

메서드 오버라이딩의 정의

오버라이딩이란 상속관계에 있는 부모 클래스에서 이미 정의 된 메서드를 자식 클래스에서 같은 의미를 갖는 메서드로 다시 정의하는 것을 말한다.

메서드 오버라이딩이 필요한 이유

객체지향언어는 캡슐화, 다형성, 상속성이라는 중요한 특징들을 가지고 있는데,
그 중 다형성과 상속성의 의미로 클래스를 유연하게 사용하기 위해 오버라이딩이 필요하다.

오버라이딩 조건

  1. 메서드의 동작만을 재정의하는 것이므로, 메서드의 선언부는 기존 메서드와 시그니처(리턴타입, 메서드 이름, 매개변수 리스트)가 완전히 같아야 한다. 하지만 메서드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.
  2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없습니다. 예를 들자면, 부모 클래스의 메서드가 private으로 선언되어 있는데, 자식 클래스에서 오버라이딩된 메서드를 public으로 둘 수 없다는 의미이다. 아래 그림을 보면 조금 더 쉽게 이해갈 것이다.

    3.부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없습니다.

예제

자식클래스의 인스턴스는 부모클래스를 가지고 있는 형태이다. 그래서 자식인스턴스를
부모 인스턴스로 형변환이 가능하다.
자식인스턴스를 부모 인스턴스로 형변환후 부모 메서드를 호출해도,
자식의 오버라이딩된 메서드가 호출된다는 것을 알수있다.

코드를 입//Parent클래스
class Parent{
  void display(){System.out.println("부모메서드 호출");}
}

//Child 클래스
class Child extends Parent{
  void display(){System.out.println("자식메서드 호출");}
}

//Parent클래스
public class Inheritance {

    public static void main(String[] args) {

        Parent pa = new Parent();

        pa.display(); //"부모메서드 호출"

        Child ch = new Child();

        ch.display(); //"자식메서드 호출"

        Parent pc = new Child();

        pc.display(); //"자식메서드 호출"

    }

}

0개의 댓글