메소드 오버라이딩(method overriding) :
상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의.
자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받은 후 메소드를 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있는 것을 뜻한다.
오버라이딩의 조건
- 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다.
- 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.
- 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
- 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.
package inherit;
class Parent1 {
int a;
public Parent1() {
System.out.println("Parent1 생성자");
a = 10;
}
public void f1() {
System.out.println("a : " + a);
}
}
class Child2 extends Parent1 {
int b;
public Child2() {
System.out.println("Child2 생성자");
b = 20;
}
// source -> override 클릭해서 재정의 할거 클릭
// 매서드 재정의. 상속받은 매서드를 고쳐서 사용
@Override
public void f1() {
// TODO Auto-generated method stub
super.f1(); // 부모 객체의 f1을 호출 하라
// 그러면 밑에 있는 System.out.println("a : " + a); 이건 안써도 됌
// System.out.println("a : " + a);
System.out.println("b : " + b);
// a 와 b 모두 출력해달라고 부모클래스의 f1 을 자식 클래스에서 재정의 함.
}
}
public class overridingTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Child1 c1 = new Child1();
c1.f1();
c1.f2();
Child2 c2 = new Child2();
c2.f1();
Parent1 p1 = new Parent1();
p1.f1();
}
}
오버로딩과 오버라이딩
메소드 오버로딩(overloading) :
서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것.
오버라이딩(overriding) :
메소드 오버라이딩이란 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미.
간단히 정의하면 오버로딩(overloading)은 새로운 메소드를 정의하는 것.
오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것.
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 - VO 객체 클래스를 이용한 프로그래밍 (0) | 2023.03.02 |
---|---|
[JAVA] 객체지향 - 다형성 (polymorphism) (0) | 2023.03.01 |
[JAVA] 객체지향 - super와 super() (0) | 2023.03.01 |
[JAVA] 객체지향 - 상속 (inheritance) (0) | 2023.03.01 |
[JAVA] 객체지향 - 문자열 비교 (0) | 2023.03.01 |