오버라이딩 (Overriding)
📚 참고
자바의 정석 기초편 (객체지향개념만)
오버라이딩
- Override : 덮어쓰다
- 상속 받은 조상의 메서드를 자신에게 맞게 변경하는 것
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;
}
}
- 선언부 변경불가
- 내용만 변경가능
- 조상의 getLocation 메서드도 상속이 되긴하나, 오버라이딩 된 메서드가 호출된다.
예제
class Point extends Object {
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 {
// Point p = new Point();
// p.x = 3;
// p.y = 5;
// System.out.println(p.toString); // x: 3, y: 5
Point p = new Point(3, 5);
// p.toString() 호출됨
System.out.println(p); // x: 3, y: 5
}
오버라이딩 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 선언부 : 반환타입, 메서드명, 매개변수 목록
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 접근 제어자 : public, protected, (default), private
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
class Parent() {
void ParentMethod() throws IOException, SQLException { ... }
}
class Child extends Parent {
// 가능
void parentMethod() throws IOException { ... }
// 불가능
void parentMethod() throws IOException, SQLException, RuntimeException { ... }
}
오버로딩 VS 오버라이딩
- 오버로딩 : 기존에 없는, 이름만 같은 새로운 메서드를 정의 (new)
- 오버라이딩 : 상속 받은 메서드의 내용을 변경 (change, modify)
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {} // 메서드 정의
void childMethod(int i) {} // 오버로딩
void childMethod() {} // 🚩에러 중복정의
}
'JAVA > 객체지향개념' 카테고리의 다른 글
패키지, 클래스 패스 (0) | 2021.03.17 |
---|---|
참조변수 super, 조상의 생성자 super() (0) | 2021.03.17 |
단일 상속 (Single Inheritance), Object 클래스 (0) | 2021.03.16 |
클래스 간의 관계 (상속, 포함) (0) | 2021.03.15 |
상속 (Inheritance) (0) | 2021.03.15 |
댓글
이 글 공유하기
다른 글
-
패키지, 클래스 패스
패키지, 클래스 패스
2021.03.17 -
참조변수 super, 조상의 생성자 super()
참조변수 super, 조상의 생성자 super()
2021.03.17 -
단일 상속 (Single Inheritance), Object 클래스
단일 상속 (Single Inheritance), Object 클래스
2021.03.16 -
클래스 간의 관계 (상속, 포함)
클래스 간의 관계 (상속, 포함)
2021.03.15