Skip to content

Latest commit

 

History

History
31 lines (23 loc) · 1.49 KB

6.md

File metadata and controls

31 lines (23 loc) · 1.49 KB

오버라이딩과 오버로딩이 무엇이며 어떤 차이가 있을까요?

오버라이딩: 상위 클래스에서 정의된 메서드를 하위클래스에서 재정의하는 것입니다. 하위클래스가 오버라이딩하는 메서드는 상위 클래스와 이름, 매개변수, 반환타입이 같아야 합니다.

접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없습니다. 또 하위클래스는 상위클래스보다 넓은 범위의 예외를 던질 수 없습니다.

오버로딩: 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것을 오버로딩이라고 합니다. 오버로딩을 하기 위해서는 메서드의 이름이 같아야 하며, 매개변수의 개수 또는 타입이 달라야합니다. 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못합니다.

질문

가변인자일 때 오버로딩은 어떻게 되나요?

public static void from(String... a) {
    System.out.println("1");
}

public static void from(String a, String b) {
    System.out.println("2");
}

public static void from(String a, String... b) {
    System.out.println("3");
}

from("1", "2") 호출 시 from(String a, String b)가 호출된다. from("1")은 현재 1번을 불러야할지 3번을 불러야할지 모호하다는 컴파일 에러가 발생한다.

그래서 가능하다면 가변인자를 사용한 메서드는 오버로딩을 하지 않는 것이 바람직하다. -자바의 정석-