: 오버라이딩이란 조상 클래스로부터 상속받은 메서드 내용을 변경하는 것을 말한다.
다음의 예제 코드는 2차원의 좌표를 표현하는 Point클래스가 있을 때, 이를 상속하는 3차원 좌표계의 한 점을 표현하는 Point3D클래스이다.
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;
}
}
다음의 Point3D의 getLocation 메서드 내용에 z좌표 정보를 추가함으로써 부모 클래스에 있는 getLocation메서드를 오버라이딩 하고 있다.
-> 한마디로 선언부가 서로 일치해야한다. 단, 접근 제어자(modifier)와 예외(exception)은 제한된 조건 하에서만 다르게 변경할 수 있다.
접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
Wrong Code - 다음의 코드는 자식 클래스에서 오버라이딩한 메소드의 예외를 조상 클래스보다 많이 한 경우이다.
이는 잘못된 코드이다.
class Parent {
void parentMethod() throws IOException, SQLException{
...
}
...
}
class Child extends Parent {
void parentMethod() throws Exception {
...
}
...
}
* Static 메서드는 오버라이딩이라고 말 할 수 없다. 조상 클래스에서 선언된 Static 메서드를 자식 클래스에서 Static 메서드로 선언하는 것은 가능하나, 두 개의 메서드는 별개이다.