Java
[자바] 오버라이드(Override)
lala9663
2022. 10. 1. 18:06
오버라이드(Override)?
부모 클래스에 있는 메소드를 자식 클래스에서 재정의 하는 것
이다. 자식 클래스가 부모 클래스를 상속하여 자식에게 없는 메소드를 호출하면 부모클래스에 가서 해당 메소드를 찾게 된다. 만약 부모 클래스의 메소드를 자식클래스에서 동일한 이름으로 다시 재정의 하면 부모클래스의 메소드를 찾지 않고 자식 클래스의 메소드를 호출하게 된다. 이것을 오버라이드(Override) 또는 재정의 라고 한다.
오버라이딩의 조건
- 오버라이딩이란 메소드의 동작만을 재정의 하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다.
하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다. - 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다
- 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.
부모 클래스 Parent 클래스의 show()메소드를 자식 클래스 Child 클래스에서 오버라이딩 한 예시
class Parent {
void show() { System.out.println("첫번째"); } // 부모 클래스의 show() 메소드입니다.
}
class Child extends Parent {
void show() { System.out.println("두번째"); } // 자식 클래스의 show() 메소드입니다..
}
public class Override {
public static void main(String[] args) {
Parent p = new Parent();
p.show();
Child c = new Child();
c.shwo();
Parent pc = new Child();
pc.show(); // Child c = new Parent(); // 두번재 라고 출력된다.
}
}
위에 예시에서 세 번째와 같은 인스턴스의 참조가 허용되는 이유는 객체지향의 다향성 때문이다.
오버라이딩과 오버로딩
오버라이딩과 오버로딩은 단어가 유사해 혼동하기 쉽다. 하지만 개념은 확실히 다르다.
오버라이딩(Overriding): 상속받은 기존의 메소드를 재정의 하는 것
오버로딩(Overloading): 새로운 메소드를 정의하는 것
부모 클래스인 Parent 클래스의 show() 메소드를 자식 클래스인 Child 클래스에서 오버라이딩과 오버로딩을 둘 다 하는 예시이다.
class Parent {
void show() { System.out.println("부모 클래스의 show() 메소드입니다."); }
}
class Child extends Parent {
// 오버라이딩된 show() 메소드
void show() { System.out.println("자식 클래스의 show() 메소드입니다."); }
void show(String str) { System.out.println(str); } // 오버로딩된 show() 메소드
}
public class over {
public static void main(String[] args) {
Child c = new Child();
c.show();
c.show("오버로딩된 display() 메소드입니다.");
}
}