오버로딩과 오버라이딩의 차이를 알아보자.
오버로딩은 기존에 없던 새로운 메서드를 추가하는 것이고, 오버라이딩은 조상으로부터 상속받은 메서드의 내용을 변경하는 것이다.
오버로딩(overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding) - 상속받은 메서드의 내용을 변경하는 것(change, modify)
메서드 오버로딩은 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것이다.
이때 조건이 있다. 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.
public void test() {}
public void test() {} // 컴파일 에러 - 메서드의 시그니처가 동일한 경우
// 메서드시그니처 : "메서드명(변수)"를 가리킨다.
private void test() {} // 에러 - 접근제어자는 메서드 시그니처에 해당하지 않는다.
public int test() { return 0; } // 에러 - 반환형은 메서드 시그니처에 해당하지 않는다.
public void test(int num) {} // 매개변수의 개수에 따른 오버로딩이 성립됨
public void test(int num2){} // 에러 - 매개변수가 위와 동일함 (타입, 숫자)
public void test(int num, int num2) {} // 매개변수의 개수에 따른 오버로딩이 성립됨
public void test(int num, String str) {} // 매개변수의 타입에 따른 오버로딩이 성립됨
public void test(String str, int num) {} // 매개변수의 순서에 따른 오버로딩이 성립됨
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩 - 기
void childMethod() {}
void childMethod(int i) {} // 오버로딩
// void childMethod() {} // 에러 - 중복정의 되었음
}
1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
2. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
[출처] 자바의 정석, 남궁성, 도우출판
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.