【发布时间】:2014-05-13 02:32:49
【问题描述】:
很抱歉这个问题含糊不清,但我发现很难正确说出标题。
我有一个超类,其中包含一个名为 calculateTotal() 的方法和一个名为 toString() 的方法。 我也有一个覆盖这两种方法的子类。
我遇到的问题是,当我从子类调用 toString() 时,super.toString() 部分返回一个字符串,该字符串具有从子类的 calculateTotal() 返回的值。 因此,我得到的 Total: 和 Grand Total: 的值相同,都是添加的 handlingFee 值。
为了说明问题,这里有一个示例输出。
预期产出:总计:20,加上 4 美元的手续费,总计:24 美元
当前输出:总计:24,加上 4 美元的手续费,总计:24 美元
任何帮助或建议将不胜感激!谢谢,
代码:
超类:
public class SuperClass {
private double unitPrice;
private int quantityOrdered;
public double calculateTotal() {
return unitPrice * quantityOrdered;
}
public String toString() {
return String.format("\nUnit Price: %.2f\nQuantity Ordered: %d\nTotal: %.2f", unitPrice, quantityOrdered, calculateTotal());
}
}
子类:
public class SubClass extends SuperClass {
private double handlingFee;
public double calculateTotal() {
return unitPrice * quantityOrdered + handlingFee;
}
public String toString() {
return String.format("%s\nPlus a $%.2f handling charge\nGrand Total: $%.2f", super.toString(), handlingFee, calculateTotal());
}
}
【问题讨论】:
-
如果您不希望子类的
calculateTotal()覆盖超类的版本,您应该或者给它一个不同的名称,或者超类的私有版本。 -
不确定您的子类如何访问 unitPrice,因为它在超类中被声明为私有。您通常可以通过使用调试器逐步解决这些类型的问题或添加记录器语句来查看正在发生的情况。
-
调试器不会帮助 OP,也不会记录日志。他/她确切地知道发生了什么,他/她只是不喜欢它。
-
谢谢,我想我对面向对象设计的理解还是欠缺的。非常感谢您的帮助!
标签: java overriding subclass superclass super