티스토리 뷰

1. 오버라이딩(Overriding)

💡 부모클래스에서 상속받은 메소드를 자식 클래스가 재정의하여 사용하기 위한 기술

1-1. 오버라이딩 성립 조건

  1. 메소드명 동일
  2. 메소드 리턴타입 동일
  3. 매개변수의 타입, 개수, 순서가 동일
  4. 부모 클래스의 private 메소드는 오버라이딩 불가능
  5. 부모 클래스의 final 키워드가 사요된 메소드는 오버라이딩 불가능
  6. 접근 제어자는 부모 메소드와 같거나 더 넓은 범위여야 함
  7. 예외처리는 같은 예외이거나 더 구체적(하위)인 예외를 처리해야 함
package com.ohgiraffers.section03.overriding;

/* 설명. class가 final 키워드가 붙으면 부모 클래스가 될 수 없다. */
//public final class SuperClass {
public class SuperClass {

    /* 수업목표. 오버라이딩(Overriding)에 대해 이해할 수 있다. */
    // 오버라이딩은 상속이 되고 나야 의미가 있다.

    public void method(int num) {}

    public Object method2(int num) {return null;}   // 반환형이 Object

    private void privateMethod() {}

    public final void finalMethod() {}      // final -> 자식에게 물려주지 않는 마지막 메소드 (마지막 선이다...), 상속만 안되게 다른 데에선 사용 가능

    protected void protectedMethod() {}     // protected -> 내 자식이면 어디서든 접근할 수 있다.

    /* 설명. default 접근 제어자는 접근제어자를 쓰지 않는 것이다. */
    void defaultMethod() {}                 // default ->나랑 다른 패키지에서 호출할 수 없다.
}
package com.ohgiraffers.section03.overriding;

public class SubClass extends SuperClass {

    /* 설명. 부모 메소드와 이름, 반환형, 매개변수, 접근제어자 모두 동일하게 오버라이딩 */
    @Override
    public void method(int num) {
    }

    /* 설명. 메소드 이름변경(새로운 메소드 생성한 셈) */
//    @Override
//    public void method1(int num) {
//    }

    /* 설명. 메소드 리턴 타입 변경(새로운 메소드 생성한 셈) */
//    @Override
//    public String method(int num) {
//        return null;
//    }

    /* 설명. 경우에 따라서는 메소드의 반환형을 달리 할 수도 있다.
        (부모 메소드의 리턴타입의 자식 타입으로는 가능) */
    @Override
    public String method2(int num) {
        return null;
    }

    /* 설명. private 메소드는 오버라이딩 불가 */
//    @Override
//    private void privateMethod() {}

    /* 설명. final 메소드는 오버라이딩 불가 */
//    public void finalMethod() {}

    /* 설명. 부모 메소드가 protected면 어디서든(어느 패키지든) 접근해서 오버라이딩 가능 */
//    @Override
//    protected void protectedMethod() {} //이름 중복 땜에 주석처리

    /* 설명. 부모 메소드의 접근제어자와 같은 범위이거나 더 넓은 범위는 가능 */
    @Override
    public void protectedMethod() {}
}

2. 오버라이딩과 오버로딩

'한화시스템 > 백엔드' 카테고리의 다른 글

[BE] JAVA_추상 클래스  (0) 2024.07.17
[BE] JAVA_다형성  (0) 2024.07.17
[BE] JAVA_상속_superkeyword  (0) 2024.07.17
[BE] JAVA_상속_개요  (0) 2024.07.17
[BE] JAVA_클래스와 객체_uses 예제  (0) 2024.07.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함