티스토리 뷰

Java

메소드 오버라이딩 (method overriding)

siyoon210 2018. 10. 29. 21:52
반응형

오버라이딩이란?

조상(부모) 클래스를 상속받은 자식 클래스를 작성할 때, 상속받은 메소드의 기능을 재정의 하는 것이다.


언제 사용할까?

상속받은 메소드 중 자식 클래스에서 사용할 수 없는 경우나, 자식 클래스를 만드는 개발자의 입장에서 메소드의 기능을 재정의를 하고 싶을 때 사용한다. (모든 클래스를 한명의 개발자가  만드는 것이 아님을 항상 염두하자)


오버라이딩 선언 조건

  1. 상속받은 메소드와 오버라이딩한 메소드의 이름이 같아야 한다.
  2. 상속받은 메소드와 오버라이딩한 메소드의 매개변수가 같아야 한다. (매개변수의 타입, 갯수)
  3. 상속받은 메소드와 오버라이딩한 메소드의 리턴타입이 같아야 한다.


오버라이딩시 주의사항

  • 오버라이딩 된 경우, 부모클래스의 메소드는 무시되고 자식클래스의 오버라이딩 된 메소드가 호출된다.
  • 자식 클래스에서 조상 클래스보다 접근제어자를 더 좁게 바꿀 수 없다. (public > protected > default > private)
  • 자손 클래스에서 조상 클래스보다 예외를 더 많이 처리 할 수 없다.
  • 인스턴스 메소드를 클래스 메소드(static)으로 바꿀 수없다. 마찬가지로 클래스 메소드(static)을 인스턴스 메소드로 바꿀 수 없다.
  • 자손 클래스에서 인스턴스를 생성할 때, 조상 클래스의 멤버도 초기화를 해야 하므로, 조상 클래스의 ’기본’ 생성자를 이용한 작업도 진행한다. (자손 클래스의 생성자가 어떤 것이더라도 조상의 ‘기본’ 생성자를 이용한다.) (자바의정석 연습문제 7-5, 7-6)
  • 오버라이딩은 메소드에만 국한되는 것으로, 같은 이름의 변수가 있더라도 오버라이딩 되지 않는다. (자바의정석 연습문제 7-20)
  • 오버라이딩을 하다보면 부모클래스 코드와 많은 중복이 발생하게 될 수도 있다. 이런 경우 super키워드를 적절히 사용하면 코드의 중복을 피하고, 간결하게 작성할 수 있다.


반응형
댓글