한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
자바에서 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
위의 조건을 만족 시키지 못 하는 메서드는 중복 정의로 간주 되어 컴파일 시 에러가 발생한다.
void println();
void println(boolean x);
void println(char x);
void println(char[] x);
void println(double x);
void println(float x);
void println(int x);
void println(long x);
void println(Object x);
void println(String x);
가변인자(variable arguments)는 메서드의 매개변수를 동적으로 지정하는 것이다.
'타입... 변수명' 과 같은 형식으로 선언
public PrintStream printf(String format, Object... args) {...}
가변인자를 매개변수 중에서 제일 마지막에 선언해야한다. 그렇지 않으면 가변인자인지 아닌지 구별할 방법이 없기 때문에 컴파일 에러가 난다.
조상 클래스로부터 상속 받은 메서드의 내용을 변경하는 것
class Point {
int x;
int y;
Strin getLocation() {
return "x: " + x + " + y: " + y;
}
}
class Point3D extends Point {
int z;
Strin getLocation() { // 오버라이딩
// return "x: " + x + ", y: " + y + ", z: " + z;
// 조상의 메서드 호출, 나중에 값이 변경 되어도 자동으로 반영
return super.getLocation() + ", z: " + z;
}
}
자손 클래스에서 오버라이딩 하는 메서드는 조상 클래스의 메서드와
-이름이 같아야 한다.
-매개변수가 같아야 한다.
-반환타입이 같아야 한다.
- JDK1.5 부터 공변 반환 타입(convariant return type)이 추가 되어, 반환 타입을 자손 클래스의 타입으로 변경하는 것은 가능하도록 조건이 완화됨
접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
만약 조상 클래스에 정의된 메서드의 접근 제어자(access modifier)가 protexcted 라면, 자손 클래스의 메서드는 protected나 public이 되어야한다.
public > protected > private
조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
예외 개수의 문제가 아닌 Exception은 모든 예외의 최고 조상이므로 가장 많은 개수의 예외를 던진다.
인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수 없다.
static 멤버들은 자신들이 정의된 클래스에 묶여있다고 생각하기
오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding): 상속 받은 메서드의 내용을 변경하는 것