【问题标题】:Calling a superclass method from a subclass从子类调用超类方法
【发布时间】:2017-07-20 16:08:58
【问题描述】:

我正在为一个银行帐户建模,其中包含一个不能透支的超类 Account 和一个子类 SavingsAccountmakeWithdrawal()方法,在主类调用时,应检查提款是否大于余额并提示输入,然后编辑余额。

如何从Account 调用makeWithdrawal() 方法并在SavingsAccount 中使用super 关键字覆盖它?我的编译器给了我“错误:不兼容的类型:缺少返回值。

Account中的方法:

double makeWithdrawal(double withdrawal)    {
    return balance -= withdrawal;
}

(很简单。)这个方法最初是抽象的,但它会导致错误。

SavingsAccount中的方法:

    public double makeWithdrawal(double withdrawal) {
        double tempbalance = getBalance();
        if (withdrawal > getBalance())  {
            withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
            return;
        }
        else    {
            return super.makeWithdrawal(withdrawal);
            }
    }

【问题讨论】:

标签: java inheritance subclass superclass bank


【解决方案1】:

问题不在于您致电super.makeWithdrawl(),这是正确的。它在它上面的if 子句中带有空的return 语句。您获取更新提款金额的逻辑是明智的,但是您需要在执行此操作时返回新余额。我建议将呼叫转移到条件之外的super.makeWithdrawl()

if(withdrawal > getBalance())  {
    withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
}
return super.makeWithdrawal(withdrawal);

如果原始提款金额太大,这将使用更新后的提款金额。

【讨论】:

    【解决方案2】:

    问题出在

    返回;

    你应该用

    替换它

    退货;

        public double makeWithdrawal(double withdrawal) {
        double tempbalance = getBalance();
        if (withdrawal > getBalance())  {
            withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
            return withdrawal;
        }
        else    {
            return super.makeWithdrawal(withdrawal);
            }
    }
    

    【讨论】:

      【解决方案3】:

      如果

      if (withdrawal > getBalance())  {
                  withdrawal = Input.getDouble("Your withdrawal cannot be larger than your balance. Enter a withdrawal <= "+getBalance());
                  return;
              }
      

      你需要返回双精度值而不是简单的返回。

      【讨论】:

      • 谢谢,我试试这个
      【解决方案4】:

      如果我理解正确的话:

      Account 是基类,SavingsAccount 是子类?

      然后:super.makeWithdrawal(withdrawal);

      还要确保在定义类时继承:

      public class SavingsAccount extends Account{...}
      

      【讨论】:

      • 不回答问题。
      猜你喜欢
      • 2011-10-24
      • 2012-04-18
      • 2011-11-22
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多