메서드 오버라이딩(overriding)
상속받은 조상의 메서드를 자신에 맞게 변경하는 것
override: v. 덮어쓰다
오버라이딩의 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
2. 접근제어자(public, protected, default, private)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
3. 예외(8장에서 배움)는 조상 클래스의 메서드보다 많이 선언할 수 없음(자손의 예외는 조상 클래스보다 같거나 적음)
class MyPoint3 {
int x;
int y;
String getLocation() { // 조상클래스의 메서드
return "x:"+x+", y:"+y;
}
}
class MyPoint3D extends MyPoint3 {
int z;
// 조상의 getLocation()을 오버라이딩
String getLocation() { // 선언부(반환타입, 메서드명, 매개변수 목록)가 조상클래스의 메서드와 모두 일치 해야함
return "x:"+x+", y:"+y+", z:"+z;
}
}
public class OverrideTest {
public static void main(String[] args) {
MyPoint3D p = new MyPoint3D();
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getLocation());
}
}
오버라이딩 vs 오버로딩
근본적으로 두개는 관계없는 것
오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것(change, modify) // 이름이 같은 메서드 내용을 수정하는 것
오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는것 (new) // 이름이 같은 메서드를 매개변수 다르게 정의 하는것, 상속X
class Parent1 {
void parentMethod() {
}
}
class Child1 extends Parent {
void parentMethod() {} // 부모 클래스의 메서드 내용 변경: 오버라이딩
void parentMethod(int i) {} // 위 라인에서 만들어진 parentMethod()를 재정의: 오버로딩
void childMethod() {} // 자손 클래스의 메서드 정의
void childMethod(int i) {} //위 라인에서 만들어진 childMethod()를 재정의: 오버로딩
// void childMethod() {} // Error, 중복 정의
}
public class CompareOver {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
'Java' 카테고리의 다른 글
Java 패키지(package) (0) | 2022.12.26 |
---|---|
Java 참조변수 super 와 조상의 생성자 super() (0) | 2022.12.26 |
Java 모든 클래스의 조상 Object 클래스 (0) | 2022.12.24 |
Java 클래스간의 관계 - 상속(Inheritance), 포함(Composite) 관계 (0) | 2022.10.10 |
Java 변수의 초기화 (0) | 2022.10.10 |