Java 다형성의 대해
자바 다형성이란 ?
자바 다형성(polymorphism)은 객체지향언어의 특징 중 하나다.
1. 다형성이란 ?
다형성이란 하나의 객체나 메소드가 여러가지 다른 형태를 가질 수 있는 것이다.
자바에서 다형성을 나타내는 것으로는 , 오버라이딩과 오버로딩 그리고 상속받은 객체의 참조변수 형변환 등이 있다.
2. 형변환(Casting) 및 사용예제
상속받는 객체에 대해서 형변환이 의미하는 것은 객체에 속한 멤버들에 대한 사용범위가 달라진다는 것을 의미한다.
- 업캐스팅(upcasting)
(자식 클래스의 인스턴스에 대한) 자식클래스의 타입의 레퍼런스 변수를 부모클래스 타입으로 형변환 하는것
( 타입변환 구문 생략 가능 , 자동 형변환됨 )
- 다운캐스팅(downcasting)
(자식 클래스의 인스턴스에 대한) 부모클래스의 타입의 레퍼런스 변수를 자식클래스 타입으로 형변환 하는것
( 타입 변환 구문 생략 불가 , 형변환 타입을 명시해야한다 )
Person 클래스의 정의 ( 부모클래스 )
public class Person {
String name;
int age;
public void speak() {
system.out.println(name + ": 안녕하세요");
}
}
Dancer 클래스의 정의 ( 자식 클래스 )
public class Dancer extends Person {
public void dance() {
system.out.println(name + ": 춤을 춥니다.");
}
}
객체 생성 및 실행
public class HelloWorld {
public static void main(String[] args) {
//==================================
System.out.println("==== 예시1 ====");
//==================================
Person p1 = new Dancer();
p1.name = "홍길동";
p1.speak();
// p1.dance(); // 사용불가
Dancer d1 = (Dancer) p1; // 다운캐스팅
d1.name = "이순신";
d1.speak();
d1.dance();
//==================================
System.out.println("==== 예시2 ====");
//==================================
Dancer d2 = new Dancer();
d2.name = "제갈공명";
d2.speak();
d2.dance();
Person p2 = (Person) d2; // 업캐스팅 - (Person) 생략가능
p2.name = "신사임당";
p2.speak();
// p2.dance(); // 사용불가
}
}
실행 결과
==== 예시1 ====
홍길동: 안녕하세요
이순신: 안녕하세요
이순신: 춤을 춥니다
==== 예시2 ====
제갈공명: 안녕하세요
제갈공명: 춤을 춥니다
신사임당: 안녕하세요
형변환(Casting)의 장점
- 형변환의 장점으로는 여러 자식 클래스 타입의 레퍼런스 변수들을 하나의 부모클래스 타입의 레퍼런스 변수로
다룰수 있다는 것입니다.
만약 아래와 같이 Person이라는 부모 클래스를 가진 자식클래스 Dancer , Singer , Actor가 있을 경우 , 부모클래스 타입으로 형변환하여 사용하게 되면 여러 장점이 있다.
1. 여러 자식 클래스 객체를 하나의 배열로 다룰수 있다.
2. 메소드의 매개 변수를 부모클래스 타입 하나로 전달받아 사용할 수 있다.