▶(메서드) 오버라이딩 (overriding)
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
class Point { // 2차원 좌표
int x; // 위치
int y;
string getlocation() {
return "x:" + x + ", y :" + y; // 점의 위치값을 문자열로 만들어서 반환하는 getlocation 메서드
}
}
class Point3D extends Point { // 3차원 좌표상의 한 점
int z;
string getlocation() { // 오버라이딩
return "x:" + x + ", y :" + y + ", z :" + z; // 선언문변경 불가, 내용(구현부.{})만 변경 가능
}
}
▶오버라이딩의 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
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;
}
}
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
( 접근 제어자 : Public, Protected, (default), Private )
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
class Parent {
void parentMethod() throws IOException SQLException { // 예외선언 1. IOException 2. SQLException
. . .
}
}
class Child extends Parent {
void parentMethod() throws IOException { // 예외선언 1. IOException2. 선언불가 3. X 선언불가
. . .
}
. . .
}
▶오버로딩 Vs. 오버라이딩
오버로딩 (overloading) : 기존에 없는 새로운 메서드를 정의하는 것 (이름이 같은) (new)
-> 상속 관계 X
오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것 (change, modify)
-> 상속 관계 O
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parnetMethod(int i) {} // 오버로딩 (메서드를 매개변수만 다르게해서 정의함)
void childMethod() {} // 메서드 정의
void childMethod(int i) {} // 오버로딩 (이름만 같은 메서드를 새로 만듬)
void childMethod() {} // 중복정의. 에러
]
'자바의 정석 - 기초편' 카테고리의 다른 글
패키지, 클래스 패스 (0) | 2022.08.23 |
---|---|
참조변수 super, 생성자 super() (0) | 2022.08.22 |
단일상속, Object클래스 (0) | 2022.08.17 |
클래스 간의 관계, 상속과 포함 (0) | 2022.08.16 |
상속 (0) | 2022.08.16 |