오버라이딩(Overriding)
class Point {
int x, y;
String getLocation() {
return "x:" + x + ", y:" + y;
}
}
class Point3D extends Point {
int z;
// 오버라이딩 : 상속 받은 조상 클래스의 메서드를 변경
String getLocation() {
return "x:" + x + ", y:" + y + ", z:" + z; // 선언은 변경 불가, 구현부만 변경 가능
}
}
- 덮어쓰다.
- 상속 받은 조상의 메서드를 자신에 맞게 변경하는 것.
조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외(throws)는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩 vs 오버라이딩
class Parent {
void p_method() {}
}
class Child extends Parent {
void p_method() {} // 오버라이딩
void p_method(int i) {} // 오버로딩
void c_method() {} // 메서드 정의
void c_method(int i) {} // 오버로딩
void c_method() {} // ERROR:중복 정의
}
- 오버로딩 : 기존에 없는 새로운(이름이 같은) 메서드를 정의하는 것 (new)
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (change, modify)