28 Ağustos 2010 Cumartesi

Relationship between Superclasses and Subclasses

In this essay, we use an inheritance hierarchy containing types types of employees in a company`s payroll application to discuss the relationship between a superclass and its subclass. In this company, commission employees (who will be represented as objects of a superclass) are paid a percentage of their sales, while  base-salaried commission employees ( who will be represented as objects of a subclass) receive a base salary plus a percentage of their sales.
The first example declares class CommissionEmployee, which  directly inherits from class Object and declares as private instance variables a first name, last name, social security number, commission rate and gross(i.e., total) sales amount.

Creating and Using a CommissionEmployee Class 

//CommissionEmployee.java
// CommissionEmployee class represents a commission employee.
public class CommissionEmployee extends Object
{
private String firstName;
private String lastName;
private String socialSecurityNumber;
private double grossSales; // gross weekly sales
private double commissionRate; // commission percentage
// five-argument constructor
public CommissionEmployee( String first, String last, String ssn, 
double sales, double rate )
{
// implicit call to Object constructor occurs here
firstName = first;
lastName = last;
socialSecurityNumber = ssn;
setGrossSales( sales ); // validate and store gross sales
setCommissionRate( rate ); // validate and store commission rate
} // end five-argument CommissionEmployee constructor
// set first name
public void setFirstName( String first )
{
firstName = first;
} // end method setFirstName
// return first name
public String getFirstName()
{
return firstName;
} // end method getFirstName
// set last name
public void setLastName( String last )
{
lastName = last;
} // end method setLastName
// return last name
public String getLastName()
{
return lastName;
} // end method getLastName
// set social security number
public void setSocialSecurityNumber( String ssn )
{
socialSecurityNumber = ssn; // should validate
} // end method setSocialSecurityNumber
// return social security number
public String getSocialSecurityNumber()
{
return socialSecurityNumber;
} // end method getSocialSecurityNumber
// set commission employee's gross sales amount
public void setGrossSales( double sales )
{
grossSales = ( sales < 0.0 ) ? 0.0 : sales;
} // end method setGrossSales
// return commission employee's gross sales amount
public double getGrossSales()
{
return grossSales;
} // end method getGrossSales
// set commission employee's rate
public void setCommissionRate( double rate )
{
commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
} // end method setCommissionRate
// return commission employee's rate
public double getCommissionRate()
{
return commissionRate;
} // end method getCommissionRate
// calculate commission employee's pay
public double earnings()
{
return commissionRate * grossSales;
} // end method earnings
// return String representation of CommissionEmployee object
public String toString()
{
return String.format( "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", 
"commission employee", firstName, lastName, 
"social security number", socialSecurityNumber, 
"gross sales", grossSales, 
"commission rate", commissionRate );
} // end method toString
} // end class CommissionEmployee

CommissionEmployee extends (inherits from) class Object (from package java.lang).Java programmers use inheritance to create classes from existing classes. In fact every class in java (except Object) extends an existing class. The public services of class CommissionEmployee include a constructor and methods earnings. Class CommissionEmployee declares each of its instance variables as private, so objects of other classes cannot directly access these variables. Declaring instance variables as private and providing get and set methods to manipulate and validate the instance variables helps enforce good sofware enginerring. CommissionEmployeeTest class  tests class CommissionEmployee class.
//CommissionEmployeeTest.java
// Testing class CommissionEmployee.
public class CommissionEmployeeTest 
{
   public static void main( String args[] ) 
   {
      // instantiate CommissionEmployee object
      CommissionEmployee employee = new CommissionEmployee( 
         "Sue", "Jones", "222-22-2222", 10000, .06 );      
      // get commission employee data
      System.out.println( 
         "Employee information obtained by get methods: \n" );
      System.out.printf( "%s %s\n", "First name is",
         employee.getFirstName() );
      System.out.printf( "%s %s\n", "Last name is", 
         employee.getLastName() );
      System.out.printf( "%s %s\n", "Social security number is", 
         employee.getSocialSecurityNumber() );
      System.out.printf( "%s %.2f\n", "Gross sales is", 
         employee.getGrossSales() );
      System.out.printf( "%s %.2f\n", "Commission rate is",
  employee.getCommissionRate() );
  employee.setGrossSales( 500 ); // set gross sales
  employee.setCommissionRate( .1 ); // set commission rate    
      System.out.printf( "\n%s:\n\n%s\n", 
         "Updated employee information obtained by toString", employee );
   } // end main
} // end class CommissionEmployeeTest
CommissionEmployee class test program is above.
CommissionEmployee class test Program

Hiç yorum yok:

Yorum Gönder