til/Java
메소드 오버라이딩(method overriding)
값진
2022. 4. 23. 22:13
메소드 오버라이딩(method overriding)
- 상속받은 부모 클래스의 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것
* 헷갈릴 수 있으나 전혀 다른 개념
메소드 오버로딩은 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것
조건
- 메소드의 동작만을 재정의하기 때문에 메소드의 선언부는 같다.
- 부모 클래스의 메소드보다 더 좁은 범위의 접근 제어자로 변경은 불가능
- 부모 클래스의 메소드보다 더 큰 범위의 예외는 선언할 수 없음
class Parent {
void display() {
System.out.println("부모 클래스의 display() 메소드");
}
}
class Child extends Parent {
void display() {
System.out.println("자식 클래스의 display() 메소드");
}
}
public class Inheritance05 {
public static void main(String[] args) {
Parent pa = new Parent();
pa.display();
Child ch = new Child();
ch.display();
Parent pc = new Child();
pc.display(); // Child cp = new Parent();
}
}
결과
부모 클래스의 display() 메소드
자식 클래스의 display() 메소드
자식 클래스의 display() 메소드
- 메소드 오버라이딩을 통해 상속받은 부모 클래스의 메소드를 자식 클래스에서 직접 재정의할 수 있다.
- 부모 클래스인 Parent 클래스의 display() 메소드를 자식 클래스인 Child 클래스에서 오버라이딩하고 있다.
오버로딩과 오버라이딩
- 오버로딩(overloading) : 새로운 메소드를 정의하는 것
- 오버라이딩(overriding) : 상속받은 기존의 메소드를 재정의하는 것
부모 클래스인 Parent 클래스의 display() 메소드를 자식 클래스인 Child 클래스에서 오버라이딩과 오버로딩하고 있다.
class Parent {
void display() {
System.out.println("부모 클래스의 display() 메소드");
}
}
//오버라이딩
class Child extends Parent {
void display() {
System.out.println("자식 클래스의 display() 메소드");
}
//오버로딩
void display(String str) {
System.out.println(str);
}
}
public class Inheritance {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
ch.display("오버로딩된 display() 메소드");
}
}
결과
자식 클래스의 display() 메소드
오버로딩된 display() 메소드