Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

9.14 ( Employee Hierarchy) In this chapter, you studied an inheritance hierarchy

ID: 3811683 • Letter: 9

Question

9.14 (Employee Hierarchy) In this chapter, you studied an inheritance hierarchy in which class BasePlusCommissionEmployee inherited from class CommissionEmployee. However, not all types of employees are CommissionEmployees. In this exercise, you’ll create a more general Employee superclass that factors out the attributes and behaviors in class CommissionEmployee that are common to all Employees. The common attributes and behaviors for all Employees are firstName, lastName, socialSecurityNumber, getFirstName, getLastName, getSocialSecurityNumber and a portion of method toString. Create a new superclass Employee that contains these instance variables and methods and a constructor. Next, rewrite class CommissionEmployee from Section 9.4.5 as a subclass of Employee. Class CommissionEmployee should contain only the instance variables and methods that are not declared in superclass Employee. Class CommissionEmployee’s constructor should invoke class Employee’s constructor and CommissionEmployee’s toString method should invoke Employee’s toString method. Once you’ve completed these modifications, run the CommissionEmployeeTest and BasePlusCommissionEmployeeTest apps using these new classes to ensure that the apps still display the same results for a CommissionEmployee object and BasePlusCommissionEmployee object, respectively.

public class CommissionEmployee
5   {
6      private final String firstName;                        
7      private final String lastName;                         
8      private final String socialSecurityNumber;             
9      private double grossSales; // gross weekly sales       
10      private double commissionRate; // commission percentage
11
12      // five-argument constructor
13      public CommissionEmployee(String firstName, String lastName,
14         String socialSecurityNumber, double grossSales,
15         double commissionRate)
16      {
17         // implicit call to Object constructor occurs here
18
19         // if grossSales is invalid throw exception
20         if (grossSales < 0.0)
21            throw new IllegalArgumentException(
22               "Gross sales must be >= 0.0");
23
24         // if commissionRate is invalid throw exception
25         if (commissionRate <= 0.0 || commissionRate >= 1.0)
26            throw new IllegalArgumentException(
27               "Commission rate must be > 0.0 and < 1.0");
28
29         this.firstName = firstName;
30         this.lastName = lastName;
31         this.socialSecurityNumber = socialSecurityNumber;
32         this.grossSales = grossSales;
33         this.commissionRate = commissionRate;
34      } // end constructor
35
36      // return first name
37      public String getFirstName()
38      {
39         return firstName;
40      }
41
42      // return last name
43      public String getLastName()
44      {
45         return lastName;
46      }
47
48      // return social security number
49      public String getSocialSecurityNumber()
50      {
51         return socialSecurityNumber;
52      }
53
54      // set gross sales amount
55      public void setGrossSales(double grossSales)
56      {
57         if (grossSales < 0.0)
58            throw new IllegalArgumentException(
59               "Gross sales must be >= 0.0");
60
61         this.grossSales = grossSales;
62      }
63
64      // return gross sales amount
65      public double getGrossSales()
66      {
67         return grossSales;
68      }
69
70      // set commission rate
71      public void setCommissionRate(double commissionRate)
72      {
73         if (commissionRate <= 0.0 || commissionRate >= 1.0)
74            throw new IllegalArgumentException(
75               "Commission rate must be > 0.0 and < 1.0");
76
77         this.commissionRate = commissionRate;
78      }
79
80      // return commission rate
81      public double getCommissionRate()
82      {
83         return commissionRate;
84      }
85
86      // calculate earnings
87      public double earnings()
88      {
89         return getCommissionRate() * getGrossSales();
90      }
91
92      // return String representation of CommissionEmployee object
93      @Override
94      public String toString()
95      {
96         return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f",
97            "commission employee", getFirstName(), getLastName(),
98            "social security number", getSocialSecurityNumber(),
99            "gross sales", getGrossSales(),
100            "commission rate", getCommissionRate());
101     }
102  } // end class CommissionEmployee

public class BasePlusCommissionEmployee extends CommissionEmployee
7   {
8      private double baseSalary; // base salary per week
9
10      // six-argument constructor
11      public BasePlusCommissionEmployee(String firstName, String lastName,
12         String socialSecurityNumber, double grossSales,
13         double commissionRate, double baseSalary)
14      {
15         super(firstName, lastName, socialSecurityNumber,
16            grossSales, commissionRate);
17
18         // if baseSalary is invalid throw exception
19         if (baseSalary < 0.0)
20            throw new IllegalArgumentException(
21               "Base salary must be >= 0.0");
22
23         this.baseSalary = baseSalary;
24      }
25
26      // set base salary
27      public void setBaseSalary(double baseSalary)
28      {
29         if (baseSalary < 0.0)
30            throw new IllegalArgumentException(
31               "Base salary must be >= 0.0");
32
33         this.baseSalary = baseSalary;
34      }
35
36      // return base salary
37      public double getBaseSalary()
38      {
39         return baseSalary;
40      }
41
42      // calculate earnings
43      @Override
44      public double earnings()
45      {
46         return getBaseSalary() + super.earnings();
47      }
48
49      // return String representation of BasePlusCommissionEmployee
50      @Override
51      public String toString()
52      {
53         return String.format("%s %s%n%s: %.2f", "base-salaried",
54            super.toString(), "base salary", getBaseSalary());   
55      }
56   } // end class BasePlusCommissionEmployee

Explanation / Answer

Updated Files

1) Employees.java


public class Employees {
  
   private final String firstName; //first name   
private final String lastName; //last name   
private final String socialSecurityNumber;//socialSecurityNumber
  
//Constructor to assign first name, last name, socialSecurityNumber
public Employees(String firstName, String lastName, String socialSecurityNumber) {
       this.firstName=firstName;
       this.lastName=lastName;
       this.socialSecurityNumber=socialSecurityNumber;
   }
  
// return first name
public String getFirstName()
{
return firstName;
}

// return last name
public String getLastName()
{
return lastName;
}

// return social security number
public String getSocialSecurityNumber()
{
return socialSecurityNumber;
}
  
// return String representation of CommissionEmployee object
@Override
public String toString()
{
return String.format("%s: %s %s%n%s: %s%n%s:",
"commission employee", getFirstName(), getLastName(),
"social security number", getSocialSecurityNumber()
);
}

}// End of the employees class

2. CommissionEmployee.java


public class CommissionEmployee extends Employees{
  
     
   private double grossSales; // gross weekly sales   
   private double commissionRate; // commission percentage
     
   // five-argument constructor
   public CommissionEmployee(String firstName, String lastName,
   String socialSecurityNumber, double grossSales,
   double commissionRate)
   {
   // implicit call to Object constructor occurs here
       super(firstName,lastName,socialSecurityNumber);
     
   // if grossSales is invalid throw exception
   if (grossSales < 0.0)
   throw new IllegalArgumentException(
   "Gross sales must be >= 0.0");
     
   // if commissionRate is invalid throw exception
   if (commissionRate <= 0.0 || commissionRate >= 1.0)
   throw new IllegalArgumentException(
   "Commission rate must be > 0.0 and < 1.0");
   //commneting the initialization as this is now done in base class Employees
   //this.firstName = firstName;
   //this.lastName = lastName;
   //this.socialSecurityNumber = socialSecurityNumber;
   this.grossSales = grossSales;
   this.commissionRate = commissionRate;
   } // end constructor
     
         
   // set gross sales amount
   public void setGrossSales(double grossSales)
   {
   if (grossSales < 0.0)
   throw new IllegalArgumentException(
   "Gross sales must be >= 0.0");
     
   this.grossSales = grossSales;
   }
     
   // return gross sales amount
   public double getGrossSales()
   {
   return grossSales;
   }
     
   // set commission rate
   public void setCommissionRate(double commissionRate)
   {
   if (commissionRate <= 0.0 || commissionRate >= 1.0)
   throw new IllegalArgumentException(
   "Commission rate must be > 0.0 and < 1.0");
     
   this.commissionRate = commissionRate;
   }
     
   // return commission rate
   public double getCommissionRate()
   {
   return commissionRate;
   }
     
   // calculate earnings
   public double earnings()
   {
   return getCommissionRate() * getGrossSales();
   }
     
   // return String representation of CommissionEmployee object
   @Override
   public String toString()
   {
   return String.format("%s: %s%n%s: %.2f%n%s: %.2f",
   "Employee", super.toString(),
   "gross sales", getGrossSales(),
   "commission rate", getCommissionRate());
   }
   } // end class CommissionEmployee

3. BasePlusCommissionEmployee.java


public class BasePlusCommissionEmployee extends CommissionEmployee{

   private double baseSalary; // base salary per week
     
   // six-argument constructor
   public BasePlusCommissionEmployee(String firstName, String lastName,
   String socialSecurityNumber, double grossSales,
   double commissionRate, double baseSalary)
   {
   super(firstName, lastName, socialSecurityNumber,
   grossSales, commissionRate);
     
   // if baseSalary is invalid throw exception
   if (baseSalary < 0.0)
   throw new IllegalArgumentException(
   "Base salary must be >= 0.0");
     
   this.baseSalary = baseSalary;
   }
     
   // set base salary
   public void setBaseSalary(double baseSalary)
   {
   if (baseSalary < 0.0)
   throw new IllegalArgumentException(
   "Base salary must be >= 0.0");
     
   this.baseSalary = baseSalary;
   }
     
   // return base salary
   public double getBaseSalary()
   {
   return baseSalary;
   }
     
   // calculate earnings
   @Override
   public double earnings()
   {
   return getBaseSalary() + super.earnings();
   }
     
   // return String representation of BasePlusCommissionEmployee
   @Override
   public String toString()
   {
   return String.format("%s %s%n%s: %.2f", "base-salaried",
   super.toString(), "base salary", getBaseSalary());   
   }
   } // end class BasePlusCommissionEmployee

Note: I dont have the test files. Please run through them and check. let me know if you find any issue. God bless you!