메소드 오버라이딩(Overriding)

조상원·2025년 8월 2일

JAVA

목록 보기
14/34
  • 부모 클래스의 메소드를 자식 클래스에서 다시 재정의해서 사용하는 것
  • @Override 어노테이션 붙임
  • 자식클래스에서 메소드 오버라이딩은 부모의 메소드와 동일한 선언부를 가져야함
  • 부모 클래스의 메소드가 private 접근 제한을 가지면 자식 클래스는 메소드를 오버라이딩 할 수 없다.
// 부모 클래스
public class Animal {
  private String name;
  private String kinds;
  
  public Animal() {
  }

  public Animal(String name, String kinds) {
      this.name = name;
      this.kinds = kinds;
  }

  public String bark() {
      return "짖는다.";
  }
}
// 자식 클래스
public class Dog extends Animal {
  private int weight;

  public Dog() {
  }

  public Dog(String name, String kinds, int weight) {
    super(name, kinds);

    this.weight = weight;
  }

  @Override
  public String bark() {
      return "멍멍~ 짖는다.";
  }
}
  • 자식 객체에서 오버라이딩된 메소드를 호출하면 부모 객체의 메소드가 아닌 오버라이딩된 자식 메소드가 호출된다
  • 부모 객체의 메소드는 삭제되는 것이 아닌 오버라이딩된 메소드에 의해 가려지게 됨
Dog dog = new Dog();

System.out.println(dog.bark()); // "멍멍~ 짖는다." 출력
  • 자식 클래스 내부에서 오버라이딩된 부모 클래스의 메소드를 호출해야 하는 상황이 발생한다면 super를 통해서 부모 메소드를 호출할 수 있음
// 부모 클래스
public class Animal {
  private String name;
  private String kinds;
  
  // 생성자 선언
  ... 

  public String bark() {
      return "짖는다.";
  }
}
// 자식 클래스
public class Dog extends Animal {
  private int weight;

  // 생성자 선언
  ... 
  @Override
  public String bark() {
      return "멍멍~ " + super.bark();
  }
}

0개의 댓글