[작성일: 2023. 01. 28]
목차
오버라이딩(Overriding)
- 상속받은 조상의 메서드를 자신에게 맞게 변경하는 것
- 부모 클래스의 메서드를 자식 클래스가 변경해서 정의하는 것
class Point {
int x;
int y;
String getLocation() {
return "x: " + x + ", y:" + y;
}
}
class Point3D extends Point { // 상속
int r;
String getLocation() { // 오버라이딩
return "x:" + x + ", y:" + y + ",r:" + r;
} // 선언부는 변경 불가, 내용(구현부)만 변경 가능
}
public class OverrideTest {
public static void main(Strint[] args) {
Point3D p = new Point3D();
p.x = 3;
p.y = 5;
p.r = 7;
System.out.println(p.getLocation());
// 오버라이딩 된 자손의 것이 호출됨.
}
}
오버라이딩 조건
- 선언부(반환타입, 메서드 이름, 매개변수 목록)가 조상 클래스의 메서드와 반드시 일치해야 함.
- 메서드 명 뿐만 아니라 메서드에 들어가는 변수의 타입이 동일해야 함.(타입이 다르면 오버로딩(overloading))
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음. (같거나 적어야 함.)
- 부모의 권한보다 같거나 낮은 권한이어야 함.
- 동일한 이름, 동일한 타입의 메서드는(오버라이딩을 하면) 자식 메서드가 우선으로 실행 됨.
오버로딩 vs 오버라이딩
오버로딩(overloading) 기존에 없는 새로운 메서드 정의(new)
오버라이딩(overriding) 상속받은 메서드의 내용 변경(change, modify)
class Parent {
void parentMethod() {} // 부모
}
class Child extends Parent { // 상속
void parentMethod() {} // 1. 오버라이딩
void parentMethod(int i) {} // 2. 오버로딩
void childMethod() {} // 3. 메서드 새로 정의
void childMethod(int i) {} // 4. 오버로딩
void childMethod() {} // 5. 중복정의. 에러
}
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.