- consider the following class hierarchy
Employee |
firstName: String lastName: String
|
getFirstName(): String
getLastName(): String
toString(): String
abstract earnings(): double
|
Boss |
weeklySalary: double
|
setWeeklySalary(): void
earnings(): double
toString(): String
|
|
CommissionWorker |
salary: double
commission: double
quantity: int
|
setSalary(): void
setCommission(): void
setQuantity(): void
earnings(): double
toString(): String
|
|
PieceWorker |
wagePerPiece: double
quantity: int
|
setSalary(): void
setWage(): void
setQuantity(): void
earnings(): double
toString(): String
|
|
HourlyWorker |
wage: double
hours: double
|
setSalary(): void
setWage(): void
setHours(): void
earnings(): double
toString(): String
|
|
- Abstract class Employee
public abstract class Employee {
private String firstName;
private String lastName;
// constructor
public Employee( String first, String last )
{
firstName = first;
lastName = last;
}
// get first name
public String getFirstName()
{
return firstName;
}
// get last name
public String getLastName()
{
return lastName;
}
public String toString()
{
return firstName + ' ' + lastName;
}
// Abstract method that must be implemented for each
// derived class of Employee from which objects
// are instantiated.
public abstract double earnings();
} // end class Employee
- Boss class
public final class Boss extends Employee {
private double weeklySalary;
// constructor for class Boss
public Boss( String first, String last, double salary )
{
super( first, last ); // call superclass constructor
setWeeklySalary( salary );
}
// set Boss's salary
public void setWeeklySalary( double salary )
{
weeklySalary = ( salary > 0 ? salary : 0 );
}
// get Boss's pay
public double earnings()
{
return weeklySalary;
}
// get String representation of Boss's name
public String toString()
{
return "Boss: " + super.toString();
}
} // end class Boss
- CommissionWorker class
public final class CommissionWorker extends Employee {
private double salary; // base salary per week
private double commission; // amount per item sold
private int quantity; // total items sold for week
// constructor for class CommissionWorker
public CommissionWorker( String first, String last,
double salary, double commission, int quantity )
{
super( first, last ); // call superclass constructor
setSalary( salary );
setCommission( commission );
setQuantity( quantity );
}
// set CommissionWorker's weekly base salary
public void setSalary( double weeklySalary )
{
salary = ( weeklySalary > 0 ? weeklySalary : 0 );
}
// set CommissionWorker's commission
public void setCommission( double itemCommission )
{
commission = ( itemCommission > 0 ? itemCommission : 0 );
}
// set CommissionWorker's quantity sold
public void setQuantity( int totalSold )
{
quantity = ( totalSold > 0 ? totalSold : 0 );
}
// determine CommissionWorker's earnings
public double earnings()
{
return salary + commission * quantity;
}
// get String representation of CommissionWorker's name
public String toString()
{
return "Commission worker: " + super.toString();
}
} // end class CommissionWorker
- PieceWorker class
public final class PieceWorker extends Employee {
private double wagePerPiece; // wage per piece output
private int quantity; // output for week
// constructor for class PieceWorker
public PieceWorker( String first, String last,
double wage, int numberOfItems )
{
super( first, last ); // call superclass constructor
setWage( wage );
setQuantity( numberOfItems );
}
// set PieceWorker's wage
public void setWage( double wage )
{
wagePerPiece = ( wage > 0 ? wage : 0 );
}
// set number of items output
public void setQuantity( int numberOfItems )
{
quantity = ( numberOfItems > 0 ? numberOfItems : 0 );
}
// determine PieceWorker's earnings
public double earnings()
{
return quantity * wagePerPiece;
}
public String toString()
{
return "Piece worker: " + super.toString();
}
} // end class PieceWorker
- HourlyWorker class
public final class HourlyWorker extends Employee {
private double wage; // wage per hour
private double hours; // hours worked for week
// constructor for class HourlyWorker
public HourlyWorker( String first, String last,
double wagePerHour, double hoursWorked )
{
super( first, last ); // call superclass constructor
setWage( wagePerHour );
setHours( hoursWorked );
}
// Set the wage
public void setWage( double wagePerHour )
{
wage = ( wagePerHour > 0 ? wagePerHour : 0 );
}
// Set the hours worked
public void setHours( double hoursWorked )
{
hours = ( hoursWorked >= 0 && hoursWorked < 168 ?
hoursWorked : 0 );
}
// Get the HourlyWorker's pay
public double earnings() { return wage * hours; }
public String toString()
{
return "Hourly worker: " + super.toString();
}
} // end class HourlyWorker
- the simple PayrollApplet
import java.text.DecimalFormat;
import java.awt.*;
import java.applet.*;
public class PayrollApplet extends Applet {
// test Employee hierarchy
public void init() {
TextArea ta;
String output = "";
Employee employee; // superclass reference
Boss boss = new Boss( "John", "Smith", 800.0 );
CommissionWorker commissionWorker =
new CommissionWorker(
"Sue", "Jones", 400.0, 3.0, 150 );
PieceWorker pieceWorker =
new PieceWorker( "Bob", "Lewis", 2.5, 200 );
HourlyWorker hourlyWorker =
new HourlyWorker( "Karen", "Price", 13.75, 40 );
DecimalFormat precision2 = new DecimalFormat( "0.00" );
// Employee reference to a Boss
employee = boss;
output += employee.toString() + " earned $" +
precision2.format( employee.earnings() ) + "\n" +
boss.toString() + " earned $" +
precision2.format( boss.earnings() ) + "\n";
// Employee reference to a CommissionWorker
employee = commissionWorker;
output += employee.toString() + " earned $" +
precision2.format( employee.earnings() ) + "\n" +
commissionWorker.toString() + " earned $" +
precision2.format(
commissionWorker.earnings() ) + "\n";
// Employee reference to a PieceWorker
employee = pieceWorker;
output += employee.toString() + " earned $" +
precision2.format( employee.earnings() ) + "\n" +
pieceWorker.toString() + " earned $" +
precision2.format( pieceWorker.earnings() ) + "\n";
// Employee reference to an HourlyWorker
employee = hourlyWorker;
output += employee.toString() + " earned $" +
precision2.format( employee.earnings() ) + "\n" +
hourlyWorker.toString() + " earned $" +
precision2.format( hourlyWorker.earnings() ) + "\n";
ta = new TextArea(output,10,50);
add(ta);
}
}