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 오버라이딩

오버로딩 - 기존에 없는 새로운 메서드를 정의하는 것

오버라이딩 - 상속받은 메서드의 내용을 변경하는 것