[자바/JAVA] 메소드 재정의 (오버라이딩)

박정현·2023년 9월 26일
0

🏠자바의 기초완성

목록 보기
23/23

메소드 재정의 (오버라이딩)

  • 부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합한 경우 자식 클래스에서 수정하여 사용
    • 부모가 가진 메소드를 자식에 물려줌 자식 입장에서 그대로 사용하기에는 부적합한 경우가 있음
    • 자식클래스에서 다시 정의(선언)해서 사용
    • 부모의 메소드 내용이 A였다면 자식은 같은 메소드를 가져오지만 내용은 B로 바꿀 수 있음
    • 즉, 부모 클래스로부터 상속받은 메소드의 내용을 재정의(변경)하는 것을 말한다.
  • 메소드 재정의 방법
    1. 부모 메소드와 동일한 시그니처 가져야 함

      • 부모에서 선언된 방식대로 자식이 선언해야 함
      • 부모의 선언부 같아야 함
      • 즉, 이름/매개변수/반환타입이 같아야 함
    2. 접근 제한 더 강하게 재정의할 수 없음

      • 접근제한자를 변경할 수 있으나 부모가 가진 접근제한자보다 강하게는 바꿀 수 없음
    3. 새로운 예외를 throws할 수 없음
      - 새로운 예외를 발생시킬 수 없음
      - 부모 클래스의 메소드보다 더 많은 수의 예외를 선언할 수 없음

      +메소드를 새로 작성하는 것이 아니고 내용만 새로 작성하는 것임을 기억하자!

  • 메소드가 재정의될 경우 부모 객체 메소드가 숨겨지며, 자식 객체에서 메소드 호출하면 자식 메소드가 호출됨
    • 부모메소드1
    • 자식메소드1
    • 자식메소드2
    • 외부에서 메소드1을 호출하면 자식메소드가 재정의했기때문에 자식메소드1이 호출됨

@Override 사용하기

@Override
메소드( ) { //메소드 부모로부터 상속 받은 메소드(구현부가 같은 메소드)
}

  1. 자식 메소드 위에 @Override 를 입력하면메소드를 재정의할 때 부모의 메소드와 같은지 검사해 준다.
  2. 메소드 선언부가 부모와 같다.
  3. 메소드 구현부를 재정의하는 방식
  4. @Override 어노테이션을 이용해서 오버라이드 되었음을 알려준다.
    • @어노테이션(annotation): 자바에서 특정 기능을 수행되도록 미리 정의하고 해당코드 바로 위에 작성하면 특정기능이 수행된다.
    • 아래 메소드가 부모로부터 상속되었음을 알 수 있음
  5. 오버라이드된 메소드는 자식메소드가 구현
  6. 단, super 키워드를 사용하면 부모메소드도 구현가능
  7. 자식클래스에서 오버라이드 메소드를 구현(implement)할 때 자동 설정이 가능하다.
    • 부모메소드의 이름을 어느정도 치도 컨트롤 스페이스하면 부모메소드명과 오버라이드글자 뜸 엔터하면 됨

부모 메소드 호출

  • 메소드가 호출이 되면 재정의된 자식 메소드를 호출함
  • 부모 메소드를 호출하고 싶을 경우가 있는데 자식메소드 내부에서 호출해야 함(자식외부에서는 불가능)
    • super.부모메소드( );

super

  • 자식 객체 생성할 때 부모 객체가 먼저 생성되고 그 다음 자식 객체가 생성됨
  • 자식 생성자의 맨 첫 줄에서 부모의 기본 생성자가 호출됨 → super( );자동으로 생성됨
  • super은 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다.
  • 멤버변수와 지역변수의 이름이 같을 때 this로 구별한 것과 매우 유사하다.
  • 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때 super로 구별할 수 있다.
  • this() 같은 클래스의 다른 생성자를 호출, super()는 부모 클래스의 생성자를 호출하는데 사용
  • 부모 생성자가 기본생성자가 아닐 경우
    • 부모 생성자가 매개변수를 가지고 있는 경우 명시적으로 호출해야 함
    • 자식생성자에서 다음과 같이 부모생성자를 호출해야 함
    • public SportsCar ( 매개변수 선언, …) {
      super (부모의 매개값, …);
      }

다형성 (Polymorphism)

  • 부모타입의 객체참조 변수로 여러 자식객체(인스턴스)를 참조할 수 있다.
  • 하나의 메소드는 객체가 다양한 기능을 구현할 수 있는 것 → 오버라이딩, 오버로딩
profile
개발을 개발괴발하지 않기 위한 노력

0개의 댓글