【问题标题】:Inheritance - Creating a class Commission Employee from class Employee and testing继承 - 从 Employee 类创建一个 Commission Employee 类并进行测试
【发布时间】:2020-04-07 19:39:36
【问题描述】:

早上好,我的任务是: 将 CommissionEmployee 类重写为 Employee 的子类。 CommissionEmployee 应仅包含未在超类 Employee 中声明的实例变量和方法。 CommissionEmployee 的构造函数应该调用 Employee 的构造函数,CommissionEmployee 的 toString 方法应该调用 Employee 的 toString 方法。 创建一个 Driver 类来测试您的新 CommissionEmployee 类。提示用户输入名字、姓氏、社会保险号、销售总额和佣金率,并创建一个 CommissionEmployee 对象,使用 toString 方法打印其信息。 我似乎遇到的问题是 CommissionEmployeeTest 类不会输出我在 CommissionEmployee 类的 toString 方法中放置的内容。我觉得我的超类 Employee 和我的测试类一样正确,但我认为错误在于我为确定收入而创建的方法中的某个地方。我正在寻找的输出是 员工名字姓氏 社会安全号码 收益 收入将是总销售额+(佣金率*总销售额) 这是我的错误:

class Employee
public class Employee extends Object {

    protected final String firstName;
    protected final String lastName;
    protected final String socialSecurityNumber;

    public Employee(String firstName, String lastName, String socialSecurityNumber) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.socialSecurityNumber = socialSecurityNumber;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getSocialSecurityNumber() {
        return socialSecurityNumber;
    }

    @Override

    public String toString() {
        return String.format(firstName, lastName, socialSecurityNumber);
    }
}
class CommissionEmployee
public class CommissionEmployee extends Employee {

    private double grossSales;
    private double commissionRate;
    private double earnings;

    public CommissionEmployee(String firstName, String lastName, String socialSecurityNumber, double grossSales,
            double commissionRate, double earnings) {
        super(firstName, lastName, socialSecurityNumber);       

        if (grossSales < 0.0)
            throw new IllegalArgumentException("Gross sales must be >= 0.0");

        if (commissionRate <= 0.0 || commissionRate >= 1.0)
            throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");

        this.grossSales = grossSales;
        this.commissionRate = commissionRate;
    }

    public void setGrossSales(double grossSales) {

        if (grossSales < 0.0)
            throw new IllegalArgumentException("Gross sales must be >= 0.0");
        this.grossSales = grossSales;
    }

    public double getGrossSales() {
        return grossSales;
    }

    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;
    }

    public double getCommissionRate() {
        return commissionRate;
    }


    public Double earnings(double d) {
        return earnings(grossSales+ (commissionRate * grossSales));
    }

    public double getEarnings() {
        return earnings;
    }

    public void setEarnings(double earnings) {
        this.earnings = earnings;
    }
    @Override

    public String toString() {

        return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f%n%s: %.2f%n%s",
                "commission employee", firstName, lastName,
                "social security number", socialSecurityNumber,
                "Total earnings", earnings(earnings));
    }

    public void setFirstName(String firstName) {
    }

    public void setLastName(String lastName) {
    }

    public void setSocialSecurityNumber(String socialSecurityNumber) {
    }

    public void setGrossSales(String grossSales) {  
    }

    public void setCommissionRate(String commissionRate) {
    }
}
class CommissionEmployeeTest
  //CommissionEmployee test program.
 import java.util.Scanner;

  public class CommissionEmployeeTest {
     public static void main(String[] args) { // instantiate CommissionEmployee object

        CommissionEmployee employee =  
           new CommissionEmployee(null, null, null, 0, .1, 0);

        Scanner input = new Scanner(System.in);

       // get commission employee data
       System.out.printf(
          "Employee information obtained by get methods:%n");

       System.out.printf("Enter employee's First name:");
               String firstName = input.nextLine();
               employee.setFirstName(firstName);

       System.out.printf("Enter employee's last name:");
               String lastName = input.nextLine();
               employee.setLastName(lastName);

       System.out.printf("Enter employee's social security number:");
               String socialSecurityNumber = input.nextLine();
               employee.setSocialSecurityNumber(socialSecurityNumber);

       System.out.printf("Gross sales for employee:");
               String grossSales = input.nextLine();
               employee.setGrossSales(grossSales);

       System.out.printf("Commission rate for employee:");
               String commissionRate = input.nextLine();
               employee.setCommissionRate(commissionRate);         

        System.out.printf("%n%s:%n%n%s%n",
            "Updated employee information obtained by toString",                          

          employee.toString());
    }
  }

错误 get方法获取的员工信息: 输入员工的名字:John 输入员工的姓氏:Doe 输入员工社保号:123456789 员工总销售额:4000.00 员工佣金率:.1 线程“主”java.lang.StackOverflowError 中的异常 在 CommissionEmployee.earnings(CommissionEmployee.java:45)

我尝试在 CommissionEmployee 中操作我的 toString 方法以及我的方法来确定收入,但我觉得我在旋转我的车轮。我很感激任何帮助。我还有 1 周的上课时间,我觉得每周发布问题时我可以提供更多信息,然后我做了最后一个问题。提前谢谢你。

【问题讨论】:

    标签: java inheritance subclass tostring superclass


    【解决方案1】:

    我已经解决了这个问题。在审查和修改(多次)后,我找到了答案。我需要修改我的 toString 方法以及我的收益方法。清理了不少代码并解决了。

    【讨论】:

    • 没有与实例变量同名的方法。
    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2014-09-25
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多