오버라이드(Override)

이동현·2023년 7월 17일
0

Java

목록 보기
13/24
post-thumbnail

📕 다형성을 구현하기 위한 Override

  • 육군(Army), 해군(Navy), 공군(AirForce)
  • Unit이라는 클래스를 통해서 공통 속성을 정의한다.
    -> 이름(멤버변수, getter, setter), 공격(attack());
  • 같은 이름이지만 다른 동작을 수행해야 하는 필요성
    -> 모든 군대는 '공격'이라는 공통된 특성을 갖지만 공격하는 방법은
    육/해/공군이 서로 다르게 처리되어야 한다.
  • 부모클래스가 갖고 있는 기능을 자식 클래스가 재정의
    -> 부모 클래스에 정의된 것과 동일한 이름을 갖는 메서드를 자식 클래스가
    정의한 경우, 부모 클래스의 기능은 자식에게 가려진다.
    -> 이렇게 부모의 기능을 재정의 하는 것을 메서드 Override 라고 한다.

1. 하나의 이름으로 다양한 효과 얻기

  • 모든 자식클래스가 동일한 이름의 메서드를 갖게 되므로 각 객체에 대하여
    attack() 이라는 이름을 사용하여 서로 다른 형태를 구현할 수 있게 된다.

2. super 키워드

  • 클래스의 상속관계에서 자식 클래스가 부모 클래스를 가리키는 예약어

  • 사용방법

    • 멤버변수 이름 앞에 명시
      : 부모 클래스의 멤버변수를 의미한다. 하지만 부모클래스의 멤버변수는
      이미 모두 상속되어 있기 때문에 이 경우에는 this 키워드를 사용하는 것과
      동일한 결과이기에 잘 사용하지 않는다.

    • 메서드이름 앞에 명시
      : 부모 클래스의 메서드를 의미한다.
      재정의 되지 않은 메서드 -> 이미 상속되어 있기 때문에 this 키워드를 사용하는 것과 동일한 결과를 갖는다.
      재정의 된 메서드 -> Override 된 메서드 이름 앞에 사용하게 되면 재정의 되기 이전의 원본 메서드를 의미한다

    • 키워드 자체를 메서드처럼 사용

      : super()

      부모 클래스의 생성자를 의미한다.

3. 생성자가 정의된 클래스의 상속 제한

  • 생성자는 상속되지 않는다.
  • 하지만 생성자가 정의된 클래스는 객체 생성을 위해서 생성자 파라미터를
    반드시 전달받아야 하기 때문에, 파라미터를 갖는 생성자가 정의된 클래스를
    상속받게 되면 에러가 발생한다.

4. @Override(Annotation)

  • 메서드 재정의 과정에서의 오타 방지 옵션
  • @Override는 이 키워드가 명시된 위치 아래에 정의되는 메서드가 부모클래스에
    존재하지 않을 경우 구문 에러로 처리된다.
  • 부모 클래스의 메서드를 재정의 하고자 할 경우, 의도치 않은 실수를 예방하기 위한
    '오타 방지 옵션' 이다.
  • 여러 개의 메서드를 재정의 한다면 재정의 되는 모든 메서드들 위에 각기 명시해야 한다.
  1. 자바 최상위 클래스
  • Object 클래스

0개의 댓글

관련 채용 정보