본문 바로가기
JAVA SE/Code

CODE [20.07.20/Day_09] Java SE / Polymorphism 다형성, object down casting 다운캐스팅

by 파프리카_ 2020. 7. 20.
728x90
반응형

[ Polymorphism 다형성 ] 

 

// VO class
class Employee{}
class Engineer extends Employee{}
class Manager extends Employee{}
class Secretary extends Employee{}

// Service class
class CompanyService{
	// 다형성이 적용되므로, 
	// 사원의 종류가 여러개여도 하나의 메서드에서 모두 실행할 수 있다.
	public void register(Employee emp) {
		System.out.println(emp + " 등록완료");
	}
}

// 실행 class
public class TestPolymorphism3 {
	public static void main(String[] args) {
		CompanyService service = new CompanyService();
		service.register(new Employee()); //Employee emp = new Employee()
		service.register(new Engineer()); //Employee emp = new Engineer()
		service.register(new Manager());  //Employee emp = new Manager()
		service.register(new Secretary());//Employee emp = new Secretary()
		
		/* 출력값
		 * step6.Employee@15db9742 등록완료
		 * step6.Engineer@6d06d69c 등록완료
		 * step6.Manager@7852e922 등록완료
		 * step6.Secretary@4e25154f 등록완료
		 */
	}
}

 

Object Casting

Down Casting

//super class
class Animal{
	public void eat() {
		System.out.println("먹다");
	}
	
	public void sleep() {
		System.out.println("자다");
	}
}

//sub class
class Person extends Animal{
	public void study() {
		System.out.println("공부하다");
	}
	//메서드 오버라이딩 (eat메서드의 기능을 바꾸자)
	public void eat() {
		System.out.println("사람이 수저로 먹다");
	}
	
}

// 실행 class
public class TestPolymorphism4 {
	public static void main(String[] args) {
		// 다형성 적용 시 특징
		// 아래와 같이 부모타입의 참조변수에 자식 객체를 참조할 경우,
		// 결합도를 낮출 수 있다.
		Animal a = new Person();
		a.sleep(); // 상속받은 부모 메서드에 접근해 사용 가능하다.
		a.eat(); // 오버라이딩 한 메서드를 사용 가능하다.
		/*출력값:
		 * 자다
		 * 사람이 수저로 먹다
		 */
		
		// a.study(); 
		// error : 자식 Person class의 독자적 멤버(study메서드)에는 접근 불가
		// a의 타입은 Animal 부모이므로
		// 자식 클래의 독자적 멤버에 접근하기 위해서는
		// Object Down casting 절차가 필요하다.
		((Person) a).study(); // a를 일시적으로 Person타입의 참조변수로 만들어준다.
		
		// 위의 표현을 풀어쓰면
		Person p = (Person) a;
		p.study();
	}
}
728x90
반응형