😀 오버라이딩
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
✔예시)
↳ 선언부는 변경불가, 구현부(내용)만 변경가능
↳ 오버라이딩 하면 조상꺼는 사용하지 않고 자손꺼를 사용한다
✔예시2)
class Point extends Object {
int x;
int y;
public Point(int x,int y) {
this.x = x;
this.y = y;
}
@Override // Object 클래스의 toString()을 오버라이딩
public String toString() {
return "x :" + x + ", y: " + y;
}
}
public class OverrideTest {
public static void main(String[] args) {
Point p = new Point(5,9);
// p.x = 5;
// p.y = 9;
System.out.println(p); //p.toString()호출
// System.out.println(p.toString());
// System.out.println("p.x :"+p.x);
// System.out.println("p.y :"+p.y);
}
}
❗ 오버라이딩의 조건
1.선언부가 조상 클래스의 메서드와 일치해야 한다.
✔예시)
class Point {
int x;
int y;
String getLocation(){ // 선언부(반환타입,메서드이름,매개변수목록)
return "x : " + x + ", y : " + y;
}
}
class Point3 extends Point {
int z;
String getLocation(){ // 선언부 : 조상클래스의 메서드와 일치해야 함
return "x : " + x + ", y : " + y + ", z : " + z;
}
}
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. (접근제어자 ex) public,protected,private)
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
✔예시)
class Parent {
void parentMethod() throws IOException, SQLException{ // 예외선언
...
}
}
class child extends Parent {
void parentMethod() throws IOException{ // 예외선언 (자손은 조상클래스보다 많이 선언할 수 없다.)
...
}
}
❗ 오버로딩 vs 오버라이딩
오버로딩(overloading) 기존에 없는 새로운 메서드를 정의하는 것(new) // 상속x
오버라이딩(overriding) 상속받은 메서드의 내용을 변경하는 것 (change, modify)
✔예시)
class Parent {
void parentMethhod() {}
}
class Child extends Parent{
void parentMethod() {} // 오버라이딩
void parentMeethod(int i) {} // 오버로딩
void childMethod() {} // 메서드정의
void childMethod(int i) {} //오버로딩
void childMethod() {} // 중복정의 -에러
'자바의 정석 > 객체지향' 카테고리의 다른 글
[객체지향] 다형성 (0) | 2022.12.11 |
---|---|
[객체지향] 제어자 (0) | 2022.12.11 |
[객체지향] 단일상속, Object클래스 (0) | 2022.12.06 |
[객체지향] 포함관계 (0) | 2022.12.06 |
[객체지향] 상속 (0) | 2022.12.05 |