조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩
// 2차원 좌표계
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x :" + x + ", y :"+ y;
}
}
// Point를 상속받음
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) { // 생성자는 반환이 없어서 void 생략
this.x = x;
this.y = y;
this.z = z;
}
// Point 클래스의 메소드에서 반환값을 수정함
String getLocation() { // 오버라이딩
return "x :" + x + ", y :"+ y + ", z :" + z;
}
자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와
달라도 되는 것
접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 가능
protected
라면, 오버라이딩하는 자손 클래스 메소드는 protected
나 private
여야 함public
→ protected
→ (default
) → private
조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 있음
class Parent {
void parentMethod() throws IOException, SQLException {
...
}
}
class Child extends Parent {
void parentMethod() throws Exception { // IOException 나 SQLException 중 하나는 가능
...
}
}
오버라이딩한 메소드에서 조상 메소드보다 예외 수가 더 적은 거 같지만,
Exception
은 예외처리의 조상클래스로 IOException, SQLException 보다 많은 수의 예외를 던질 수 있어서 안 됨
참고 static 메서드는 오버라이딩 할 수 없음
class Parent {
void parentMethod() {
...
}
}
class Child extends Parent {
void parentMethod() {} // 오버라이팅
void parentMethod(int i) {} // 오버라딩
}