【问题标题】:java inheritance and method [closed]java继承和方法
【发布时间】:2012-10-18 02:04:37
【问题描述】:

我在尝试根据此要求编译以下代码时遇到问题:

给定一个现有的类 BankAccount,其中包含: 一个构造函数,接受对应于帐户持有人姓名的字符串。 一种方法 getBalance,它返回对应于帐户余额的双精度值。 一种接受双倍的取款方法,并从账户余额中扣除金额。 为子类 CheckingAccount 编写一个类定义,其中包含: 一个布尔实例变量,透支。 (支票账户透支允许开出大于当前余额的支票)。 一个接受字符串和布尔值的构造函数。 String 参数用于调用超类(BankAccount)构造函数,而布尔值用于初始化透支实例变量。 一个方法,hasOverdraft,它返回一个布尔值。如果帐户支持透支,hasOverdraft 返回 true。 一种方法 clearCheck,它接受一个双精度并返回一个布尔值。 clearCheck 将确定(支票的)金额是否可以兑现——如果金额小于账户余额,或者账户允许透支,就会出现这种情况。如果支票可以兑现,则clearCheck返回true,同时调用withdraw方法更新账户余额;否则,clearCheck 返回 false。

代码:

public class CheckingAccount extends BankAccount {
private boolean overdraft; 

public CheckingAccount(String a, boolean overdraft) {
this.name = super.name;
this.overdraft = overdraft;}

boolean hasOverdraft() {if(overdraft); return true;}

boolean clearCheck(double checkAmount) {if(checkAmount < balance || hasOverdraft() == true); return true && withdraw();}
}

错误:

CheckingAccount.java:4: error: constructor BankAccount in class BankAccount cannot be applied to given types;
public CheckingAccount(String a, boolean overdraft) {
                                                    ^
  required: String
  found: no arguments
  reason: actual and formal argument lists differ in length
CheckingAccount.java:5: error: name has private access in BankAccount
this.name = super.name;
    ^
CheckingAccount.java:5: error: name has private access in BankAccount
this.name = super.name;
                 ^
CheckingAccount.java:10: error: method withdraw in class BankAccount cannot be applied to given types;
boolean clearCheck(double checkAmount) {if(checkAmount < balance || hasOverdraft() == true); return true && withdraw();}

【问题讨论】:

  • 请出示BankAccount类...
  • 它不是问题假设的问题的一部分,因为它在给定现有类 BankAccount 的情况下说明
  • 当然,这是问题的一部分。您的所有编译器错误都与该类有关。
  • @gucciv12:这是问题的一部分,因为错误消息告诉您您从BankAccount 错误地调用了构造函数和方法。为了帮助您修复它,我们需要查看这些构造函数和方法是如何声明的。
  • 你是什么意思,你看不到它?如果您希望针对它进行编译,那么您显然至少需要可用的已编译类文件,理想情况下也是源代码。你有这个类的javadoc吗?如果您缺少此信息,则需要返回您的讲师那里。

标签: java inheritance methods


【解决方案1】:
class CheckingAccount extends BankAccount {                

CheckingAccount(String name, boolean overdraft) {                    
super(name);                    
this.overdraft = overdraft;                }                

boolean hasOverdraft() {return overdraft;}                

boolean clearCheck(double amount) {
if (getBalance() >= amount || overdraft) {withdraw(amount);return true;}return false;} boolean overdraft;}

【讨论】:

    【解决方案2】:
    public class BankingAccount {
        protected String name;
    
        public BankingAccount(String n) { this.name = n; }
    }
    
    
    public class CheckingAccount extends BankingAccount {
        protected boolean overdraft;
    
        public CheckingAccount(String n, boolean overdraft) {
            super(n);
            this.overdraft = overdraft;
        }
    }
    

    【讨论】:

      【解决方案3】:

      BankAccount 似乎没有可见的无参数构造函数。从错误消息来看,它似乎有一个带有一个参数的构造函数:String

      因此,您必须在 CheckingAccount 的构造函数中显式调用正确的构造函数。通常看起来像这样:

      public CheckingAccount(String a, boolean overdraft) {
          super(a);
          this.overdraft = overdraft;
      }
      

      但这实际上取决于String 应该代表什么,以及a 应该代表什么(这是一个非常不具描述性的参数名称)。

      其次,BankAccount 中的name 字段似乎不可见。无论如何,通过将其分配给 this.name 来尝试执行的操作没有任何意义,因为 name 不是在 CheckingAccount 中声明的字段。

      第三,withdraw()好像需要参数,但是你没有提供。

      【讨论】:

        猜你喜欢
        • 2018-04-21
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 2012-04-25
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        相关资源
        最近更新 更多