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
반응형
'JAVA SE > Code' 카테고리의 다른 글
CODE [20.07.24/Day_12] Java SE / Interface 인터페이스 (0) | 2020.07.24 |
---|---|
CODE [20.07.23/Day_11] Java SE / Method, Static, Abstract, Interface 인터페이스 (0) | 2020.07.23 |
CODE [20.07.17/Day_08] Java SE / 접근제어자, Inheritance 상속 (0) | 2020.07.17 |
[20.07.15/Day_06] Java SE / Array 배열 (0) | 2020.07.15 |
[20.07.14/Day_05] Java SE / Variable Scope, 객체 초기화, Relationship association, aggregation (0) | 2020.07.14 |