반응형
이번 글에서는 부모 타입으로 자식 객체를 참조하는 방식과
그럴 때 호출되는 오버라이딩 메서드의 동작 방식을 실습합니다.
이것이 바로 객체지향 프로그래밍의 핵심 중 하나인 다형성(Polymorphism) 입니다.
📦 부모 클래스 코드 (Parent.java)
package ch07.sec07.exam02;
public class Parent {
public void method1() {
System.out.println("Parent-method1()");
}
public void method2() {
System.out.println("Parent-method2()");
}
}
📦 자식 클래스 코드 (Child.java)
package ch07.sec07.exam02;
public class Child extends Parent {
public void method2() {
System.out.println("Child-method2()");
}
public void method3() {
System.out.println("Child-method3()");
}
}
📌 실행 코드 (ChildExample.java)
package ch07.sec07.exam02;
public class ChildExample {
public static void main(String[] args) {
Child child = new Child();
Parent parent = child; // 자동 타입 변환 (업캐스팅)
parent.method1(); // Parent의 method1()
parent.method2(); // Child에서 오버라이딩된 method2()
// parent.method3(); // (X) Parent 타입에는 method3()이 없음
}
}
💬 코드 설명
- Parent parent = new Child();
→ 자식 객체를 부모 타입으로 참조하는 업캐스팅 - parent.method1()
→ 부모 클래스에서 정의된 메서드 → Parent-method1() 실행 - parent.method2()
→ 자식 클래스에서 오버라이딩한 메서드 → Child-method2() 실행
→ 이처럼 호출은 참조 변수 타입이 아니라 실제 객체 기준으로 동작함 (동적 바인딩) - parent.method3()
→ ❌ 부모 타입에는 존재하지 않기 때문에 호출 불가 → 컴파일 오류
💻 실행 결과
Parent-method1()
Child-method2()
📌 간단 정리
선언 타입 | 호출 가능 메서드 | 실제 실행 메서드 |
Parent | method1(), method2() | Parent 또는 Child에 따라 다름 |
Child | method1(), method2(), method3() | 모두 호출 가능 |
💡 포인트 정리
- 부모 타입으로 자식 객체를 참조할 수 있다 → 업캐스팅
- 오버라이딩된 메서드는 실제 객체 기준으로 실행됨
- 부모 타입에는 없는 메서드는 호출 불가 (컴파일 오류)
- 다형성은 유연하고 확장 가능한 구조 설계의 핵심 개념
📌 정리하자면,
다형성은 하나의 타입(부모)으로 여러 타입(자식)의 객체를 다룰 수 있게 해주며,
공통된 인터페이스로 다양한 동작을 구현할 수 있는 기반이 됩니다.
'Java > 자바 정리' 카테고리의 다른 글
65. 매개변수의 다형성 – 하나의 메서드로 여러 객체 동작시키기 (0) | 2025.05.08 |
---|---|
64. 필드의 다형성 – 하나의 타입으로 다양한 객체 다루기 (1) | 2025.05.07 |
63. 다운캐스팅(Downcasting)과 참조 타입의 한계 (0) | 2025.05.07 |
61. 자동 타입 변환 (Promotion) - 상속 관계에서의 업캐스팅 (0) | 2025.05.07 |
60. protected 접근 제한자 - 상속과 패키지에 따른 접근 제어 (0) | 2025.05.07 |
59. final 메서드 – 오버라이딩을 금지하기 (0) | 2025.05.07 |