In this chapter, we created the CommissionEmployeeBasePlusCommissionEmployee inheritance hierarchy to model the relationship between two types of

Question:

In this chapter, we created the CommissionEmployee–BasePlusCommissionEmployee inheritance hierarchy to model the relationship between two types of employees and how to calculate the earnings for each. Another way to look at the problem is that CommissionEmployees and BasePlusCommissionEmployees are each Employees and that each has a different CompensationModel object. A CompensationModel would provide an earnings method. Subclasses of CompensationModel would contain the details of a particular Employee’s compensation:

a) CommissionCompensationModel—For Employees who are paid by commission, this CompensationModel subclass would contain grossSales and commissionRate instance variables, and would define earnings to return grossSales * commissionRate.

b) BasePlusCommissionCompensationModel—For Employees who are paid a base salary and commission, this CompensationModel subclass would contain instance variables grossSales, commissionRate and baseSalary and would define earnings to return baseSalary + grossSales * commissionRate.

Class Employee’s earnings method would simply call the composed CompensationModel’s earnings method and return its result. This approach is more flexible than our original hierarchy. For example, consider an Employee who gets promoted. With the approach described here, you can simply change that Employee’s CompensationModel by assigning the composed CompensationModel reference an appropriate subclass object. With the CommissionEmployee–BasePlusCommissionEmployee hierarchy, you’d need to change the employee’s type by creating a new object of the appropriate class and moving data from the old object into the new one. 

Implement the Employee class and CompensationModel hierarchy discussed in this exercise. In addition to the firstName, lastName, socialSecurityNumber and CompensationModel instance variables, class Employee should provide:

a) A constructor that receives three Strings and a CompensationModel to initialize the instance variables.

b) A set method that allows the client code to change an Employee’s CompensationModel.

c) An earnings method that calls the CompensationModel’s earnings method and returns its result.

When you invoke method earnings via the superclass CompensationModel reference to a subclass object (of type CommissionCompensationModel or BasePlusCommissionCompensationModel), you might expect superclass CompensationModel’s earnings method to execute. What actually happens?

The subclass object’s earnings method executes. This is called polymorphic behavior. In your test application, create two Employee objects—one with a CommissionCompensation-Model and one with a BasePlusCommissionCompensationModel—then display each Employee’s earnings. Next, change each Employee’s CompensationModel dynamically and redisplay each Employee’s earnings.

Fantastic news! We've Found the answer you've been seeking!

Step by Step Answer:

Related Book For  book-img-for-question

Java How To Program Late Objects Version

ISBN: 9780136123712

8th Edition

Authors: Paul Deitel, Deitel & Associates

Question Posted: