[자바] 메서드 오버라이딩

Gammi·2022년 10월 21일
0

JAVA

목록 보기
16/35
post-thumbnail

📕 메서드 오버라이딩(Method Overriding)


  • 슈퍼클래스로부터 상속받은 메서드를 서브클래스에 재정의하는 것

  • 기본클래스의 메서드와 동일하게 생긴 메서드를 정의하므로 서브클래스에서는 슈퍼클래스의 메서드 보이지X

    -> 슈퍼클래스의 메서드는 은닉되고 자신의 메서드만 보이게 됨

  • 기존에 상속된 메서드 내용을 변경하는 경우 사용

    -> 슈퍼클래스의 메서드에 새로운 기능을 추가···





📕 오버라이딩 규칙


  1. 상속 관계 필수

  2. 메서드 시그니처(메서드명, 리턴타입, 파라미터) 일치

    -> 리턴타입은 부모와 같거나 서브클래스 타입으로 변경 가능

  3. 접근제한자는 같거나 넓은 범위로만 변경 가능



슈퍼클래스의 접근제한자보다 좁아질 수 없음!

public static void main(String[] args) {
}

class Parent {
  public void parentPrn() {
    System.out.println("슈퍼클래스의 parentPrn()");
  }
}

class Child extends Parent {
  public void child() {
    System.out.println("서브클래스의childPrn3()");
  }
  
    public void parentPrn() {
    // 접근제한자는 슈퍼클래스보다 좁아질 수 없기 때문에
    // 서브클래스에서 오버라이딩 했을 때 public이 와야함!
    System.out.println("슈퍼클래스에서 오버라이딩된 parentPrn()");
    // 메서드 이름, 리턴타입, 파라미터 동일
   } 
}

리턴값은 기존 리턴타입보다 서브클래스 타입이어야 함!

public static void main(String[] args) {
}

class Parent {
  public Object parentPrn2() {
   // 리턴타입 최상위 클래스 Object
   System.out.println("슈퍼클래스의 parentPrn2()");
  }
  
  public String parentPrn3() {
   // 리턴타입 String
   System.out.println("슈퍼클래스의 parentPrn3()");
  }
}

class Child extends Parent {
  public void child() {
    System.out.println("서브클래스의childPrn3()");
  }
  
  public String parentPrn2() {
   // 원래 리턴타입이 Object였기 때문에
   // 그것보다 낮은 String이 오는 것 가능함!
   System.out.println("슈퍼클래스에서 오버라이딩된 parentPrn2()");
  }
  
//  public Object parentPrn3() { // 오류발생!!!
//  원래 리턴타입이 String이었기 때문에
//  이것보다 높은 Object 타입이 리턴타입으로 올 수 없음
//   System.out.println("슈퍼클래스에서 오버라이딩된 parentPrn3()");
  }
}

오버라이딩 시 오버로딩은 불가능!

public static void main(String[] args) {
  Student s = new Student();
  s.sleep();
}

class Person {
  public void sleep() {
    System.out.println("잠 자기!");
  }
}

class Student extends Person {
  
  public void sleep() { // 오버라이딩
    System.out.println("엎드려 잠자기!");
  }
  
// public void sleep(int min) { 
//  파라미터 추가해서 오버로딩
//  System.out.println(min "분 동안 엎드려 잠자기!");
//    }
// !!!!오버라이딩 할 때 오버로딩 불가!!!!
}

🔗 참고

< 오버라이딩 단축키 >

Alt + Shift + S -> V
(이미 오버라이딩된 메서드는 표시 안됨)

profile
개발자가 되었어요⭐️

0개의 댓글