메서드 오버라이딩

hashin·2023년 6월 1일

JAVA

목록 보기
13/19

메서드 오버라이딩(Method Overriding)은 자식 클래스에서 부모 클래스의 메서드를 재정의하는 개념입니다.

오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 동일한 이름과 시그니처로 재정의하여 자신의 동작을 구현할 수 있습니다.

오버라이딩은 상속 관계에 있는 클래스들 간에 발생하며, 부모 클래스의 메서드를 자식 클래스에서 재정의하면 자식 클래스의 인스턴스에서 해당 메서드를 호출할 때 부모 클래스가 아닌 자식 클래스의 구현이 실행됩니다.

오버라이딩을 위해서는 다음 규칙을 따라야 합니다:

  1. 메서드 이름, 매개변수 개수, 타입, 순서가 동일해야 합니다. 이를 메서드의 시그니처(signature)라고 합니다.
  2. 접근 제어자는 부모 클래스의 메서드와 동일하거나 더 넓은 범위로 변경할 수 있습니다.
  3. 부모 클래스의 메서드가 final이거나 private인 경우 오버라이딩할 수 없습니다.
  4. 부모 클래스의 메서드가 인스턴스 메서드라면 자식 클래스에서도 인스턴스 메서드로 오버라이딩해야 합니다.
  5. 부모 클래스의 메서드가 반환 타입이 있는 경우, 자식 클래스에서 오버라이딩된 메서드의 반환 타입은 부모 클래스의 반환 타입과 같거나 그의 하위 타입이어야 합니다. Java 5 이전에는 반환 타입이 정확히 일치해야 했지만, Java 5부터는 공변 반환 타입(covariant return type)을 지원합니다.
class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("강아지가 짖는다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound();  // "동물이 소리를 낸다." 출력

        Dog dog = new Dog();
        dog.makeSound();  // "강아지가 짖는다." 출력
    }
}

위의 예시에서 Animal 클래스는 makeSound 메서드를 정의하고 있습니다. 이를 자식 클래스인 Dog 클래스에서 오버라이딩하여 makeSound 메서드의 동작을 재정의했습니다. Main 클래스에서 Animal과 Dog 객체를 생성하여 makeSound 메서드를 호출하면, 각 객체의 오버라이딩된 메서드가 실행되어 강아지의 짖는 소리

0개의 댓글