오버라이딩(overriding)
- 상속받은 조상의 메서드를 자신에게 맞게 변경하는 것 (덮어쓰는 것)
class Point {
int x;
int y;
String getLocation() {
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point {
int z;
String getLocation() { // 오버라이딩 : 내용(구현부 {})만 변경 가능
return "x :" + x + ", y :" + y + ", z :" + z;
}
}
- 구현부의 내용만 변경 가능하며, 선언부는 변경이 불가능 하다.
- 조건
1. 선언부(반환타입, 메서드 이름, 매개변수 목록)가 조상 클래스의 메서드와 일치해야 한다.
2. 접근 제어자(public, protected, default, private)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
3. 예외(throws IOException 등)는 조상 클래스의 메서드보다 많이 선언할 수 없다. (같거나 적어야 됨)
- 오버로딩 vs 오버라이딩
- 오버로딩 : 기존에 없는, 이름이 같은 새로운 메서드를 정의 (new) -> 상속과 관계 없음
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (change, modify)
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {} // 메서드 정의
void childMethod(int i) {} // 오버로딩
void childMethod() {} // 중복 정의 (에러)
}