오버로딩과 오버라이딩 전에 메소드 시그니쳐 개념을 먼저 알아보자.
메소드 시그니쳐(Method signature)
- 메소드의 선언부에 명시되는 매개변수의 리스트를 말한다.
- 만약 두 메소드가 매개변수의 개수와 타입, 그 순서까지 모두 같다면, 두 메소드의 시그니처는 같다고 할 수 있다.
오버로딩(overloading)
- 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다.
- 즉, 서로 다른 시그니처를 갖는 여러 메소드를 같은 이름으로 정의하는 것이다.
- 오버로딩은 OOP특징인 다형성을 구현하는 방법 중 하나다.
오버라이딩(overriding)
- 부모클래스의 메서드를 자식클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것이다.
- 부모클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
- 부모클래스의 메소드보다 더 큰 범위의 에외를 선언할 수 없다.
class Parent {
void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }
}
class Child extends Parent {
// 오버라이딩
void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }
// 오버로딩
void display(String str) { System.out.println(str); }
}
public class Main {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
ch.display("오버로딩된 display() 메소드입니다.");
}
}
// 자식 클래스의 display() 메소드입니다.
// 오버로딩된 display() 메소드입니다.
'Java' 카테고리의 다른 글
[Java] 다형성, 업캐스팅과 다운캐스팅, instanceof (0) | 2022.09.12 |
---|---|
[Java] super & super() (0) | 2022.09.11 |
[Java] 클래스 상속관계와 포함관계 차이 (0) | 2022.09.09 |
[Java] 상속과 Object 클래스 (0) | 2022.09.09 |
[Java] 접근 제어자 (0) | 2022.09.08 |