프로그래밍언어/Java
[Java 기본] 다형성과 메서드 오버라이딩
배세
2024. 7. 23. 18:31
다형성과 메서드 오버라이딩
다형성을 이루는 또 하나의 중요한 핵심 이론은 메서드 오버라이딩이다. 메서드 오버라이딩은 "오버라이딩 된 메서드가 항상 우선권을 가진다" 는 점이 가장 중요하다.
메서드 오버라이딩을 다형성과 함께 사용해보자.
예제
Parent.java
public class Parent {
public String value = "parent";
public void method() {
System.out.println("Parent.method");
}
}
Child.java
public class Child extends Parent{
public String value = "child";
@Override
public void method() {
System.out.println("Child.method");
}
}
Main.java
public class OverridingMain {
public static void main(String[] args) {
// 자식 변수가 자식 인스턴스 참조
Child child = new Child();
System.out.println("Child -> Child");
System.out.println("value = " + child.value);
child.method();
// 부모 변수가 부모 인스턴스 참조
Parent parent = new Parent();
System.out.println("Parent -> Parent");
System.out.println("value = " + parent.value);
parent.method();
// 부모 변수가 자식 인스턴스 참조(다형적 참조)
Parent poly = new Child();
System.out.println("Parent -> Child");
System.out.println("value = " + poly.value);
poly.method();
}
}
실행결과
=> 변수는 오버라이딩 되지 않는다. 그러나 메서드는 오버라이딩 된다.
poly 변수는 Parent 타입니다. 따라서 poly.value, poly.method()를 호출하면 인스턴스의 Parent 타입에서 기능을 찾아서 실행한다.
- poly.value: Parent 타입에 있는 value 값을 읽는다.
- poly.method() : Parent 타입에 있는 method() 를 실행하려고 한다. 그런데 하위타입인 Child.method()가 오버라이딩 되어있다. 오버라이딩 된 메서드가 우선권을 가지므로 Child.method가 실행된다.
즉, 다형적 참조는 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있는 기능이다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.