java - 继承Java super.print()不返回值

标签 java inheritance methods casting

我的代码不会打印出佣金的付费、当前时间和总销售额,我认为这可能与继承有关,但我不确定。我在另一个类(class)选角,但我认为问题就在这里,因为我的其他类(class)的选角没有问题。除了佣金的 3 个值之外,程序中返回所有值。工资和当前工作时间按小时更新,佣金是从中继承的,但它在佣金类中不起作用。

//StaffMember Class
public abstract class StaffMember {
protected String name, address, number;

public StaffMember(String name, String address, String number) {
    this.name = name;
    this.address = address;
    this.number = number;
}

public String toString(){
    return "Name: " +name + "\nAddress: " +address + "\nPhone: " +number;
}

public abstract double pay();
}

//Employee Class
public class Employee extends StaffMember{
    private String rsiNumber;
    protected double payRate;

public Employee(String rsiNumber, double payRate, String name, String address, String number) {
    super(name, address, number);
    this.rsiNumber = rsiNumber;
    this.payRate = payRate;
}

public String toString(){
    return super.toString() + "\nRSI Number: " +rsiNumber + String.format("\nPaid: €%,.2f" ,pay());
}

public double pay(){
    return payRate;
}
}


//Hourly Class
public class Hourly extends Employee{
    private int hours;

public Hourly(String rsiNumber, double payRate, String name, String address, String number) {
    super(rsiNumber, payRate, name, address, number);
    this.hours = 0;
}

public void addHours(int hours){
    this.hours=hours;
}

public double pay(){
    int otHours=0;
    if(hours>40){
        otHours=hours-40;
    }
    double pay=(hours-otHours)*payRate+(otHours*payRate*1.5);
    return pay;
}

public String toString(){
    return super.toString() + "\nCurrent Hours: " +hours;
}
}


//Commission Class
public class Commission extends Hourly{
    private double totalSales, commissionRate;

public Commission(double commissionrate, String rsiNumber, double payRate, String name, String address, String number) {
    super(rsiNumber, payRate, name, address, number);
    this.commissionRate = commissionrate;
    this.totalSales=0;
}

public void addSales(int sales){
    this.totalSales=sales;
}

public double pay(){
    return super.pay()+(totalSales*commissionRate);
}

public String toString(){
    return super.toString() + "\nTotal Sales: " +totalSales;
}
}


//Casting Method From Another Class
public void processStaff(){
    for(int i=0; i<sm.length; i++){
        if (sm[i] instanceof Hourly) {
            Hourly h = (Hourly) sm[i];
            if(h.name.equals("Joanne")){
                h.addHours(50);
            }
        }else if (sm[i] instanceof Executive) {
            Executive e = (Executive) sm[i];
            if(e.name.equals("John")){
                e.awardBonus(500);
            }
        }else if (sm[i] instanceof Commission) {
            Commission c = (Commission) sm[i];
            if(c.name.equals("Molly")){
                c.addHours(55);
                c.addSales(400);
            }else if(c.name.equals("Joe")){
                c.addHours(45);
                c.addSales(950);
            }
        }
    }
}

这是当我应该返回值而不是 0 时得到的输出。

编辑:似乎已经找到了解决方案,只需将佣金放入每小时中,因为佣金是每小时的一种类型。

public void processStaff() {
    for (int i = 0; i < sm.length; i++) {
        if (sm[i] instanceof Hourly) {
            Hourly h = (Hourly) sm[i];
            if (h.name.equals("Joanne")) {
                h.addHours(50);
            } else if (sm[i] instanceof Commission) {
                Commission c = (Commission) sm[i];
                if (c.name.equals("Molly")) {
                    c.addHours(55);
                    c.addSales(400);
                } else if (c.name.equals("Joe")) {
                    c.addHours(45);
                    c.addSales(950);
                }
            }
        } else if (sm[i] instanceof Executive) {
            Executive e = (Executive) sm[i];
            if (e.name.equals("John")) {
                e.awardBonus(500);
            }
        }
    }
}

最佳答案

       if (sm[i] instanceof Hourly) {

       /* .... */
       }else if (sm[i] instanceof Commission) {
            Commission c = (Commission) sm[i];
            if(c.name.equals("Molly")){
                c.addHours(55);
                c.addSales(400);
            }else if(c.name.equals("Joe")){
                c.addHours(45);
                c.addSales(950);
            }
       }

第一个条件对于Commission 成立,因此您永远不会对其调用addHours 或addSales。因此没有任何可显示的内容。

您确实应该使用调试器查看类的内容。

关于java - 继承Java super.print()不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882882/

相关文章:

java - 为列表添加值初始化列表大小

java - 在java中使用CDI注入(inject)多个log4j记录器类型

C++类继承困惑

c# - 为什么在 C# 中不继承构造函数?

Python 检查字符串是否在 dir() 中以及是否将该字符串转换为方法/函数调用

java - Java 8 上的 Tomcat 8 是否支持为 Java 6 和 Tomcat 6 构建的应用程序?

java - 将数组中的元素向右移动,返回第二大元素,删除元素(java 开头)

python - Python 中的类继承、 super 方法和重写方法

java - 从另一个对象的方法更改对象变量

java - 如何将两个整数的数字相加?