헷갈리기 쉬운 오버로딩과 오버라이딩에 대해 정리해 보았다.
한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것
① 같은 메소드 이름
② 다른 매개변수 선언부(매개변수 타입, 개수, 순서)
메소드의 리턴 타입은 오버로딩 조건과 관계 없음
자식 클래스가 상속받은 부모 메소드를 재작성하는 것
-> 부모가 제공하는 기능을 후손이 일부 고쳐 사용하겠다는 의미로
자식 객체를 통한 실행 시 후손의 것이 우선권을 가짐
(부모 클래스의 메소드와 자식 클래스의 메소드 비교)
① 메소드 이름 동일
② 매개변수의 개수, 타입, 순서 동일
③ 리턴 타입 동일
④ private 메소드 오버라이딩 불가
오버라이딩(Overriding) | 오버로딩(Overloading) |
---|---|
하위 클래스에서 메소드 정의 | 같은 클래스에서 메소드 정의 |
메소드 이름 동일 매개변수 동일(개수, 타입, 순서) 리턴 타입 동일 | 메소드 이름 동일 매개변수 다름(개수, 타입, 순서) 리턴 타입 상관 없음 |
자식 메소드의 접근 범위가 부모 메소드의 접근 범위보다 넓거나 같아야 함 | 접근 제어자와 상관 없음 |
자식 메소드의 예외 수가 부모 메소드의 예외 수보다 적거나 범위가 좁아야 함 | 예외 처리와 상관 없음 |