有关composition的问题,请求高手回答???
public class CommissionEmployee
{
protected String firstName;
protected String lastName;
protected String socialSecurityNumber;
protected double grossSales; // gross weekly sales
protected 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 gross sales amount
public void setGrossSales( double sales )
{
grossSales = ( sales < 0.0 ) ? 0.0 : sales;
} // end method setGrossSales
// return gross sales amount
public double getGrossSales()
{
return grossSales;
} // end method getGrossSales
// set commission rate
public void setCommissionRate( double rate )
{
commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
} // end method setCommissionRate
// return commission rate
public double getCommissionRate()
{
return commissionRate;
} // end method getCommissionRate
// calculate earnings
public double earnings()
{
return commissionRate * grossSales;
} // end method earnings
// return String representation of CommissionEmployee2 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
public class BasePlusCommissionEmployee extends CommissionEmployee
{
private double baseSalary; // base salary per week
// six-argument constructor
public BasePlusCommissionEmployee( String first, String last,
String ssn, double sales, double rate, double salary )
{
super( first, last, ssn, sales, rate );
setBaseSalary( salary ); // validate and store base salary
} // end six-argument BasePlusCommissionEmployee constructor
// set base salary
public void setBaseSalary( double salary )
{
baseSalary = ( salary < 0.0 ) ? 0.0 : salary;
} // end method setBaseSalary
// return base salary
public double getBaseSalary()
{
return baseSalary;
} // end method getBaseSalary
// calculate earnings
public double earnings()
{
return baseSalary + ( commissionRate * grossSales );
} // end method earnings
// return String representation of BasePlusCommissionEmployee
public String toString()
{
return String.format(
"%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f ",
"base-salaried commission employee ", firstName, lastName,
"social security number ", socialSecurityNumber,
"gross sales ", grossSales, "commission rate ", commissionRate,
"base salary ", baseSalary );
} // end method toString
} // end class BasePlusCommissionEmployee
class BasePlusCommissionEmployeeTest
{
public static void main( String args[] )
{
// instantiate BasePlusCommissionEmployee object
BasePlusCommissionEmployee basePlusCommissionEmployee =
new BasePlusCommissionEmployee(
"Bob ", "Lewis ", "333-33-3333 ", 5000, .04, 300 );
// get base-salaried commission employee data
System.out.println(
"Employee information obtained by get methods: \n " );
System.out.printf( "%s %s\n ", "First name is ",
basePlusCommissionEmployee.getFirstName() );
System.out.printf( "%s %s\n ", "Last name is ",
basePlusCommissionEmployee.getLastName() );
System.out.printf( "%s %s\n ", "Social security number is ",
basePlusCommissionEmployee.getSocialSecurityNumber() );
System.out.printf( "%s %.2f\n ", "Gross sales is ",
basePlusCommissionEmployee.getGrossSales() );
System.out.printf( "%s %.2f\n ", "Commission rate is ",
basePlusCommissionEmployee.getCommissionRate() );
System.out.printf( "%s %.2f\n ", "Base salary is ",
basePlusCommissionEmployee.getBaseSalary() );
basePlusCommissionEmployee.setBaseSalary( 1000 ); // set base salary
System.out.printf( "\n%s:\n\n%s\n ",
"Updated employee information obtained by toString ",
basePlusCommissionEmployee.toString() );
} // end main
} // end class BasePlusCommissionEmployeeTest
本来是用继承来完成的,现在要改成组成。。composition怎么做啊。。。
[解决办法]
public class BasePlusCommissionEmployee //extends CommissionEmployee
{
private double baseSalary; // base salary per week
private CommissionEmployee ce;
// six-argument constructor
public BasePlusCommissionEmployee( String first, String last,
String ssn, double sales, double rate, double salary )
{
ce = new CommissionEmployee( String first, String last, String ssn,
double sales, double rate );
setBaseSalary( salary ); // validate and store base salary
} // end six-argument BasePlusCommissionEmployee3 constructor
public String getFirstName(){
return ce.getFirstName();
}
// set base salary
public void setBaseSalary( double salary )
{
baseSalary = ( salary < 0.0 ) ? 0.0 : salary;
} // end method setBaseSalary
// return base salary
public double getBaseSalary()
{
return baseSalary;
} // end method getBaseSalary
// calculate earnings
public double earnings()
{
return baseSalary + ( ce.getGrossSales() *ce.getCommissionRate());
} // end method earnings
// return String representation of BasePlusCommissionEmployee3
public String toString()
{
return String.format(
"%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f ",
"base-salaried commission employee ", firstName, lastName,
"social security number ", socialSecurityNumber,
"gross sales ", grossSales, "commission rate ", commissionRate,
"base salary ", baseSalary );
} // end method toString
} // end class BasePlusCommissionEmployee3
class BasePlusCommissionEmployeeTest
{
public static void main( String args[] )
{
// instantiate BasePlusCommissionEmployee3 object
BasePlusCommissionEmployee basePlusCommissionEmployee =
new BasePlusCommissionEmployee(
"Bob ", "Lewis ", "333-33-3333 ", 5000, .04, 300 );
// get base-salaried commission employee data
System.out.println(
"Employee information obtained by get methods: \n " );
System.out.printf( "%s %s\n ", "First name is ",
basePlusCommissionEmployee.getFirstName() );
System.out.printf( "%s %s\n ", "Last name is ",
basePlusCommissionEmployee.getLastName() );
System.out.printf( "%s %s\n ", "Social security number is ",
basePlusCommissionEmployee.getSocialSecurityNumber() );
System.out.printf( "%s %.2f\n ", "Gross sales is ",
basePlusCommissionEmployee.getGrossSales() );
System.out.printf( "%s %.2f\n ", "Commission rate is ",
basePlusCommissionEmployee.getCommissionRate() );
System.out.printf( "%s %.2f\n ", "Base salary is ",
basePlusCommissionEmployee.getBaseSalary() );
basePlusCommissionEmployee.setBaseSalary( 1000 ); // set base salary
System.out.printf( "\n%s:\n\n%s\n ",
"Updated employee information obtained by toString ",
basePlusCommissionEmployee.toString() );
} // end main
}
发现如下提示错误是什么原因啊。。???。。。。
ce = new CommissionEmployee( String first, String last, String ssn,
^
1 error
Process completed.