You are on page 1of 9

June 29,

OBJECT ORIENTED PROGRAMMING


2022

Lab Final
Question No. 01:

10.12 (Accounts Payable System Modification) It's possible to include the functionality of the
pay roll application (Figs. 10.4-10.9) in the accounts payable application without modifying
Employee subclasses SalariedEmployee, HourlyEmployee. CommissionEmployee or
BasePlusCommission Esp Tyee. To do so, you can modify class Employee (Fig. 1814) to
implement intertice Payable and declare method getPayment Amount to invoke method earnings,
Method, get Payment Amount would then be inherited by the subclasses in the Employee
hierarchy. When getPayment Amount is called for a particular subclass object, is
polymorphically invokes the appropriate earnings method for that subclass. Reimplement
Exercise 10.11 using the original Employee hierarchy from the payroll appli cation of Figs. 10.4-
10.9. Modify class Employee as described in this exercise and donor modify any of class
Employee's subclasses.

ANSWER:
PAYABLE INTERFACE:

public interface Payable {

double getPaymentAmount();

EMPLOYEE CLASS:

public abstract class Employee implements Payable{

private String FirstName, LastName, SocialSecurityNumber;

public Employee(String fname, String lname, String ssn){

setFirstName(fname);

setLastName(lname);

setSocialSecurityNumber(ssn);

1
June 29,
OBJECT ORIENTED PROGRAMMING
2022

public void setFirstName(String firstName) {

FirstName = firstName;

public void setLastName(String lastName) {

LastName = lastName;

public void setSocialSecurityNumber(String socialSecurityNumber) {

SocialSecurityNumber = socialSecurityNumber;

public String getFirstName() {

return FirstName;

public String getLastName() {

return LastName;

public String getSocialSecurityNumber() {

return SocialSecurityNumber;

public String tostring(){

return String.format("%s %s \nSocial Security Number:

%s",getFirstName(),getLastName(),getSocialSecurityNumber());

public abstract double Earnings();

@Override

public double getPaymentAmount() {

2
June 29,
OBJECT ORIENTED PROGRAMMING
2022

return Earnings();

SALARIED-EMPLOYEE CLASS:

public class SalariedEmployee extends Employee{

private double weeklySalary;

public SalariedEmployee(String fname, String lname, String ssn, double

wsalary){

super(fname,lname,ssn);

setWeeklySalary(wsalary);

public double getWeeklySalary() {

return weeklySalary;

public void setWeeklySalary(double weeklySalary) {

if(weeklySalary>=0.0){

this.weeklySalary = weeklySalary;

else

throw new IllegalArgumentException("Weekly Salary Must be >= 0.0");

@Override

public double Earnings () {

return getWeeklySalary();

3
June 29,
OBJECT ORIENTED PROGRAMMING
2022

@Override

public String tostring() {

return String.format("Salaried Employee: %s\nWeekly Salary:

$%f",super.tostring(), getWeeklySalary());

HOURLY-EMPLOYEE CLASS:

public class HourlyEmployee extends Employee{

private double wage, hours;

public HourlyEmployee(String fname, String lname, String ssn, double

HourlyWage, double HoursWorked) {

super(fname, lname, ssn);

setHours(HoursWorked);

setWage(HourlyWage);

public void setWage(double wage) {

this.wage = wage;

public void setHours(double hours) {

if((hours >= 0.0) && (hours <= 168.0)){

this.hours = hours;

else

throw new IllegalArgumentException("Hours worked must be >= 0.0 and

<= 168.0");

4
June 29,
OBJECT ORIENTED PROGRAMMING
2022

public double getWage() {

return wage;

public double getHours() {

return hours;

@Override

public double Earnings() {

if ( getHours() <= 40 )

return getWage() * getHours();

else

return 40 * getWage() + (getHours()-40) * getWage() * 1.5;

@Override

public String tostring() {

return String.format("Hourly Employee: %s\nHourly Wage: $%f\nHours

Worked: %f",super.tostring(),getWage(),getHours());

COMMISSION-EMPLOYEE CLASS:

public class CommissionEmployee extends Employee{

private double GrossSales, CommissionRate;

public CommissionEmployee(String fname, String lname, String ssn, double

gSale, double cRate) {

5
June 29,
OBJECT ORIENTED PROGRAMMING
2022

super(fname, lname, ssn);

setGrossSales(gSale);

setCommissionRate(cRate);

public void setGrossSales(double grossSales) {

if (grossSales >= 1.0){

this.GrossSales = grossSales;

else

throw new IllegalArgumentException("Gross Sales must be >= 1.0.");

public void setCommissionRate(double commissionRate) {

if((commissionRate >= 0.0) && (commissionRate <= 1.0)){

this.CommissionRate = commissionRate;

else

throw new IllegalArgumentException("Commission Rate must be >= 0.0

and <= 1.0.");

public double getGrossSales() {

return GrossSales;

public double getCommissionRate() {

return CommissionRate;

6
June 29,
OBJECT ORIENTED PROGRAMMING
2022

@Override

public double Earnings() {

return getCommissionRate() * getGrossSales();

@Override

public String tostring() {

return String.format("Commission Employee: %s\nGross Sales:

$%f\nCommission Rate: %f",super.tostring(), getGrossSales(),

getCommissionRate());

BASE-PLUS-COMMISSION-EMPLOYEE CLASS:

public class BasePlusCommissionEmployee extends CommissionEmployee{

private double BaseSalary;

public BasePlusCommissionEmployee(String fname, String lname, String ssn,

double gSale, double cRate, double bSalary) {

super(fname, lname, ssn, gSale, cRate);

setBaseSalary(bSalary);

public double getBaseSalary() {

return BaseSalary;

public void setBaseSalary(double baseSalary) {

if(baseSalary>=0.0){

this.BaseSalary = baseSalary;

7
June 29,
OBJECT ORIENTED PROGRAMMING
2022

else

throw new IllegalArgumentException("Base Salary Must be >= 0.0");

@Override

public double Earnings() {

return getBaseSalary() + super.Earnings();

@Override

public String tostring() {

return String.format("Base-Salaried %s\nBase Salary: $%f",super.tostring(),

getBaseSalary());

MAIN CLASS:

public class Main {

public static void main(String[] args) {

SalariedEmployee salariedEmployee = new

SalariedEmployee("Bilal","Khan","SCN4201",800);

HourlyEmployee hourlyEmployee = new

HourlyEmployee("Ali","Hassan","SCN4202",12,15);

CommissionEmployee commissionEmployee = new

CommissionEmployee("Hamza","Malik","SCN4203",15240,0.069);

BasePlusCommissionEmployee basePlusCommissionEmployee = new

BasePlusCommissionEmployee("Samad","Shehroz","SCN4204",12650,0.05,400);

8
June 29,
OBJECT ORIENTED PROGRAMMING
2022

Employee[] employee = new Employee[4];

employee[0] = salariedEmployee;

employee[1] = hourlyEmployee;

employee[2] = commissionEmployee;

employee[3] = basePlusCommissionEmployee;

System.out.println("Employee Data Shown Polymorphically:\n");

for (int i=0; i< employee.length; i++){

System.out.println("\n"+employee[i].tostring());

System.out.println("Earned: $" + employee[i].getPaymentAmount());

if(employee[i] instanceof BasePlusCommissionEmployee){

BasePlusCommissionEmployee objRef =

(BasePlusCommissionEmployee) employee[i];

objRef.setBaseSalary(1.10 * objRef.getBaseSalary());

System.out.println("Base salary with 10% increase:

$"+objRef.getBaseSalary());

System.out.println("Earned: $" + objRef.getPaymentAmount());

You might also like