Language/Java
Java 객체지향의 꽃, 다형성
Creeper Park
2024. 1. 23. 23:12
다형성
여러 형태를 가질 수 있는 성질.
자바에서는 “한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 것”을 다형성이라고 한다.
특히 두 클래스가 서로 상속관계에 있을 경우, 조상 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것이 가능하다. (자손타입으로 조상 인스턴스 참조는 안됨)
Tv t = new Tv();
CaptionTv c = new CaptionTv(); //참조타입과 인스턴스 타입 일치
Tv tc = new CaptionTv(); //조상타입(Tv)의 참조변수로 자손 인스턴스(CaptionTv)를 참조
- 참조변수의 형변환
참조변수의 형변환은 서로 상속 관계에 있는 클래스에서만 가능하다.
From 자손 to 조상(업캐스팅) : 형변환 생략가능
From 조상 to 자손(다운캐스팅) : 형변환 생략불가.
class BindingTest {
public static void main(String[] args) {
Parent p = new Child(); //조상 타입의 참조변수 p로 자손 인스턴스를 참조
Child c = new Child(); //자손 타입의 참조변수 c로 자손 인스턴스를 참조
System.out.println(p.x);
p.method();
System.out.println(c.x);
c.method();
}}
class Parent {
int x=100;
void method() {System.out.println("Parent method");} }
class Child {
int x=200;
void method() {System.out.println("Child method");} }
출력 결과 : 100/Child method/200/Child method
조상클래스에 선언된 멤버변수와 같은 이름의 인스턴스 변수를 중복으로 자손 클래스에 정의했을 때,
조상타입의 참조변수로 자손 인스턴스를 참조하는 경우(p.x=100)와
자손타입의 참조변수로 자손 인스턴스를 참조하는 경우(c.x=200)는 서로 다른 결과를 얻는다.