오버라이딩(overriding)
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라 한다.
public static void main(String[] args) {
class Point {
int x = 1;
int y = 2;
String getLocation() {
return "x : " + x + ", y : " + y;
}
}
class Point3D extends Point {
int z = 3;
String getLocation() {
return "x : " + x + ", y : " + y + ", z : " + z; // 오버라이딩 getLocation() 반환 값에 ", z : " + z를 추가
}
}
System.out.println(new Point3D().getLocation());
}
위에서 Point 클래스의 getLocation()은 한 점의 좌표를 문자열로 반환하도록 작성되었다. Point 클래스와 Point3D 클래스는 서로 상속관계에 있으므로 Point 클래스로부터 getLocation()을 상속받지만 Point3D 클래스는 3차원 좌표계의 한 점을 추가하기 위한 것이므로 조상으로부터 상속받은 getLocation()은 3차원 좌표계를 표현하기에 맞지 않다. 그래서 이 메서드를 3차원 좌표계를 표현할 수 있게 z축의 좌표값도 포함하여 반환하도록 오버라이딩 하였다.
오버라이딩의 조건
오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.
1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
만일 조상 클래스에 정의된 메서드의 접근 제어자가 protected라면, 이를 오버라이딩하는 자손 클래스의 메서드는 접근 제어자가 protected나 public이어야 하는데 대부분의 경우 같은 범위의 접근 제어자를 사용한다.
2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
오버로딩과 오버라이딩
오버로딩(overloading)은 기존에 없던 메서드를 새로 추가하는 것
오버라이딩(overriding)은 상속받은 메서드의 내용을 변경하는 것
[참조] - 남궁 성, JAVA의 정석, 도우출판, 2019
'Java의 정석' 카테고리의 다른 글
패키지(Package) (0) | 2022.04.01 |
---|---|
참조변수 super (0) | 2022.03.31 |
Object 클래스 (0) | 2022.03.29 |
단일 상속(single inheritance) (0) | 2022.03.28 |
클래스 간의 관계 2 (0) | 2022.03.25 |