반응형
ch7-7 오버라이딩(overriding)
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
매개변수와 같은 선언부는 변경 불가, 내용만 구현부만 변경 가능하다.
package ch07;
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;
}
}
public class OverrideTest {
public static void main(String[] args) {
Point3D p = new Point3D();
p.x = 100;
p.y = 200;
p.z = 300;
System.out.println(p.getLocation());
}
}
새로 오버라이딩된 자손의 메서드가 호출된다.
상속받은 메서드의 내용을 나에게 맞게 변경할 수 있다.
package ch07;
class Point {
int x;
int y;
public String toString() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() {
return "x:" + x + " y: " + y +" z: "+ z;
}
}
public class OverrideTest {
public static void main(String[] args) {
Point3D p = new Point3D();
p.x = 100;
p.y = 200;
p.z = 300;
System.out.println(p);
}
}
this.x = x;
this.y = y;
ch7-8 오버라이딩의 조건
* 규칙 외우기
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
즉 반환타입, 메서드이름, 매개변수 목록이 모두 일치해야 한다.
2. 접근 제어자가 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩 vs 오버라이딩
전혀 상관이 없다.
오버로딩은 기존에 없는 메서드를 정의하는 것 (new)
오버라이딩은 상속받은 메서드의 내용을 변경하는 것 (change, modify)
반응형
'자바의정석' 카테고리의 다른 글
[자바의 정석 - 기초편] ch7-12~14 패키지, 클래스 패스 (0) | 2022.03.19 |
---|---|
[자바의 정석 - 기초편] ch7-10,11 참조변수 super, 생성자 super() (0) | 2022.03.19 |
[자바의 정석 - 기초편] ch7-5,6 단일상속, Object클래스 (0) | 2022.03.18 |
[자바의 정석 - 기초편] ch7-3,4 클래스 간의 관계, 상속과 포함 (0) | 2022.03.18 |
[자바의 정석 - 기초편] ch7-1,2 상속 (0) | 2022.03.17 |