오버라이딩이란 부모가 가지고 있는 메소드와 똑같은 모양의 메소드를 자식이 가지고 있는 것이다.
즉 오버라이딩이란 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것이다.
- 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다.
하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.- 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
- 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.
오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것이다.
오버로딩(overloading)은 새로운 메소드를 정의하는 것이다.
단어가 비슷하지만 다른 개념!
package inheritance_exam;
class A{
void print(){
System.out.println("부모클래스의 print() 메소드");
}
}
class B extends A {
//오버라이딩 된 print() 메소드
void print() {
System.out.println("자식클래스의 print() 메소드");
super.print(); //부모클래스의 메소드 호출
}
void print(String str){
System.out.println(str); // 오버로딩 된 print() 메소드
}
}
public class overriding {
public static void main(String[] args) {
A parents = new A();
parents.print(); // A 클래스 print()메소드 호출
B child = new B();
child.print(); // B 클래스 print()메소드 호출
A pnc = new B();
pnc.print(); // 부모클래스의 메소드를 자식클래스에서 오버라이딩
child.print("오버로딩 된 print() 메소드");
}
}
부모클래스의 print() 메소드
자식클래스의 print() 메소드
부모클래스의 print() 메소드
자식클래스의 print() 메소드
부모클래스의 print() 메소드
오버로딩 된 print() 메소드