더북(TheBook)

empl의 타입이 Employee인데도 Manager.getSalary 메서드가 호출된다. 메서드를 호출할 때 가상 머신은 객체의 실제 클래스를 살펴보고, 해당 클래스에 맞는 메서드 버전을 찾아서 실행한다. 이 과정을 동적 메서드 조회(dynamic method lookup)라고 한다.

그렇다면 Manager 객체를 왜 Employee 변수에 할당할까? 이렇게 하면 직원이 관리자든 문지기든, 또 다른 Employee 서브클래스의 인스턴스든 상관없이 모든 직원 객체로 작동하는 코드를 작성할 수 있다.

Employee[ ] staff = new Employee[...];

staff[0] = new Employee(...);

staff[1] = new Manager(...); // 슈퍼클래스 변수에 할당해도 된다.

staff[2] = new Janitor(...);

...

double sum = 0;

for (Employee empl : staff)

    sum += empl.getSalary();

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.