오버라이딩
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것이다.
바로 아래 예시를 살펴보면,
class Point3D extends Object{
int x;
int y;
Point3D(int x, int y){
this.x = x;
this.y = y;
}
// 기본으로 상속되는 Object class(모든 class의 최고 조상 class)의 toString() 메서드를 오버라이딩
public String toString() {
return "x: "+ x + ", y: " + y;
}
}
public class OverridinEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Point3D p3 = new Point3D(1,2);
// println 메서드의 기능: 내부적으로 참조변수가 인자로 들어오면, 내부적으로 toString()을 호출한다.
// println(참조변수) == println(객체.toString())
System.out.println(p3.toString());
System.out.println(p3);
}
}
- 모든 class의 최고조상 class인 Object의 toString() 메서드를 오버라이딩한 예시이다.
오버라이딩의 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자(public, protecter, private ..)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상클래스의 메서드보다 많이 선언할 수 없다.
+) 오버라이딩 VS 오버로딩
- 전혀 관련없음.(오버라이딩은 상속과 관련.)
- 오버로딩: 기존에 없는 (이름이 같은)새로운 메서드를 정의하는 것.(아래 3가지 조건이 성립하면 오버로딩이다.)
- 메서드의 이름이 같다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향이 없다.
- 오버라이딩: 상속받은 메서드의 내용을 변경하는 것.
class Parent{
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩 (위 메서드 오버로딩 )
void childMethod() {} // 메서드 정의
void childMethod(int i) {} // 오버로딩 (위 메서드 오버로딩 )
void childMethod() {} // 중복정의 (Error)
}
'JAVA' 카테고리의 다른 글
17. 제어자 (0) | 2022.10.03 |
---|---|
16. super()와 super (0) | 2022.10.02 |
14. 상속과 포함 (0) | 2022.10.02 |
13. 멤버변수의 초기화 (0) | 2022.09.25 |
12. this()와 this (0) | 2022.09.24 |