오버로딩 & 오버라이딩

조용근·2024년 2월 6일

자바 정리

목록 보기
3/21

오버로딩(Overloading)

같은 이름의 메서드를 한 클래스 내에 여러 개 정의하는 것을 말한다.

특징:

  • 메서드 이름이 동일해야 한다.
  • 매개변수의 타입, 개수, 순서가 달라야한다.
  • 반환 타입이나 접근 제어자가 다른 경우에는 오버로딩으로 간주되지 않는다.
package javaplus.over;

public class OverloadingEx {
    void demo(int a){
        System.out.println(a);
    }
    void demo(int a, int b){
        System.out.println(a+ "," + b);
    }
    double demo(double a){
        System.out.println(a);

        return a;
    }
}

오버라이딩(Overriding)

상속 관계에 있는 부모 클래스로부터 상속받은 메서드의 내용을 자식 클래스에서 재정의하는 것이다.

규칙:

  • 메서드 이름, 매개변수 목록이 부모 클래스의 메서드와 동일해야 한다.
  • 접근 제어 수준이 부모 클래스의 메서드보다 더 제한적이면 안 된다.
    //예를들면, 부모 클래스의 메서드가 'protected'라면, 오버라이딩하는 메서드는 'protected' or 'public'이 적합하다.
  • 예외는 부모 클래스의 메서드가 던지는 예외가 같거나 그 하위 타입의 예외만 던질 수 있다.
  • 반환 타입은 부모 클래스의 메서드 반환 타입과 같거나, 그 하위 타입이어야 한다.
package javaplus.over;

public class OverridingEx {
    void display() {
        System.out.println("부모 메서드");
    }
}

class Child extends OverridingEx {
    @Override
    void display() {
        System.out.println("자식 메서드");
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.display(); // "자식 메서드" 출력

        OverridingEx parent = new OverridingEx();
        parent.display(); // "부모 메서드" 출력
    }
}

오버로딩 vs. 오버라이딩

오버로딩같은 클래스 내에서 메소드 이름은 같지만 매개변수가 다른 여러 메소드를 정의하는 것

오버라이딩상속받은 메소드를 자식 클래스에서 재정의하는 것으로, 메소드의 이름, 매개변수 목록이 동일해야 하며, 오버라이딩은 상속과 밀접한 관련이 있다.

profile
Today I Learn

0개의 댓글