Java
[Java] 오버로딩과 오버라이딩
hh_lin
2019. 1. 1. 13:51
오버로딩
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것으로 같은 기능을 하는 메서드의 경우 하나의 이름으로 정의할 수 있다.
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
가변인자
기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해줄 수 있게 되었다.
'타입... 변수명'과 같은 형식으로 선언한다.
가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.
1 2 3 | public PrintStream printf(String format, Object... args) { ... } | cs |
오버라이딩
조상 클래스로부터 상속받은 메서드의 내용을 자손 클래스 자신에 맞게 변경하는 것.
- 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다.
- 즉, 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 이름, 매개변수, 반환타입이 같아야 한다.
- 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. (public > protected > default > private)
- 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- 인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수 없다.
cf) 조상 클래스에 정의된 static 메서드를 자손 클래스에서 똑같은 이름의 static 메서드로 정의하는 것은 각 클래스에 별개의 static 메서드를 정의한 것일 뿐 오버라이딩이 아니다.
오버로딩 vs 오버라이딩
오버로딩 - 기존에 없는 새로운 메서드를 정의하는 것
오버라이딩 - 상속받은 메서드의 내용을 변경하는 것