Ch7-7~9. 오버라이딩
0. 목차
Chapter7. 객체지향 프로그래밍Ⅱ
Ch7 - 7. 오버라이딩
Ch7 - 8. 오버라이딩의 조건
Ch7 - 9. 오버로딩 vs. 오버라이딩
Ch7 - 7. 오버라이딩
▶ 오버라이딩(overriding)이란?
▷ overriding : v. 덮어쓰다
▷ 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
class Point {
int x;
int y;
String getLocation() {
return "x : " + x + ", y : " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() { // 조상의 String getLocation()을 오버라이딩
return "x : " + x + ", y : " + y + " z : " + z; // 선언부 변경불가, 구현부 변경가능
}
}
▶ Object 클래스의 toString()을 오버라이딩
▷ p.toString()
class Point {
int x;
int y;
public String toString() {
return "x : " + x + ", y : " + y;
}
}
class OverrideTest {
public static void main(String[] args) {
Point p = new Point();
System.out.println(p.toString());
}
}
// console
x : 0, y : 0
▷ p만 넣어도 toString() 출력
class OverrideTest {
public static void main(String[] args) {
Point p = new Point();
System.out.println(p);
}
}
// console
x : 0, y : 0
▷ 매개변수가 있는 생성자를 이용하여 x, y 출력
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "x : " + x + ", y : " + y;
}
}
class OverrideTest {
public static void main(String[] args) {
Point p = new Point(5, 9);
System.out.println(p);
}
}
// console
x : 5, y : 9
Ch7 - 8. 오버라이딩의 조건
▶ 오버라이딩의 조건 3가지
▷ 선언부가 조상 클래스의 메서드와 일치해야 함
- 선언부의 반환 타입, 메서드 이름, 매개변수 목록 모두 일치해야 함
▷ 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
- 접근 제어자 : public, protected, private, defalt
▷ 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음
Ch7 - 9. 오버로딩 vs. 오버라이딩
오버로딩과 오버라이딩은 이름만 비슷할 뿐 전혀 관계 없음
▶ 오버로딩(overloading)
▷ 기존에 없는 이름이 같은 새로운 메서드를 정의하는 것(new)
▷ 상속과 관계無
▶ 오버라이딩(overriding)
▷ 상속받은 메서드의 내용을 변경하는 것(change, modify)
▷ 상속과 관계有
class Parent {
void parentMethod() { }
}
class Child extends Parent {
void parentMethod() { } // 오버라이딩
void parentMethod(int i) { } // 오버로딩
void childMethod() { } // 메서드 정의
void childMethod(int i) { } // 오버로딩
void childMethod() { } // 에러, 중복 정의
}