* 다형성은 참조 변수의 타입을 자신 또는 상속받는 상위 타입으로 선언하는 것을 의미한다.
- 다형성이 가능한 이유는 객체 생성 시 실제 상속받는 객체가 메모리에 생성된다.
- java.lang.Object 객체는 모든 자바 클래스의 상위 객체이기 때문에 모든 참조 변수는 Object 타입으로 선언될 수 있다.
Salesman, Manager, Director 클래스는 Employee클래스를 상속받는다.
abstract class Employees extends Object{
String name; int salary; public abstract void calcSalary(); public abstract void calcBonus(); }
다형성을 적용하여 매개변수의 타입을 선언한 메서드는 자신뿐만 아니라 모든 하위 객체를 인자값으로 전달받아 실행할 수 있기 때문에 하나의 메소드로만 기능 구현이 가능하다.
- 다형성이 적용된 참조 변수의 타입을 판별하기 위해서는 instanceof 연산자를 사용한다.
- 상위 타입으로 선언된 참조변수는 상위 객체의 내용만 접근할 수 있기 때문에 원래의 타입으로 변환한 후 사용해야한다.
public void calcSalary(Employee e) {
if(e instanceof Salesman) {
//SalesMan이라면
Salesman s = (Salesman) e;
s.annual_salary = 65000;
System.out.println("Salesman 입니다.");
}else if(e instanceof Manager) {
//Manager라면
Manager m = (Manager) e;
m.num_team = 10;
System.out.println("Manager 입니다.");
}else if(e instanceof Director) {
//Director라면
Director d = (Director) e;
d.num_project = 5;
System.out.println("Director 입니다.");
}
};