【问题标题】:Using a single parameter from a Super class where the super class uses more parameters使用来自超类的单个参数,其中超类使用更多参数
【发布时间】:2017-12-19 19:22:26
【问题描述】:

这可能是很容易解决的问题,但我对 Java 真的很陌生,我在修复这个错误时遇到了问题。我正在开发一台基本的 ATM 机(我现在还想不通)。我有一个 BankAccount 类、一个 Checking Account(扩展 bankAccount)、一个 SavingAccount 类(也扩展 bankAccount)和一个 User 类。在我的 CheckingAccount 类中,我想使用我的 SUPER 类(bankAccount)中的一个参数,“余额”,但我不确定是否有一种方法可以只使用具有多个 One 的构造函数中的 ONE 参数范围。如果是这样,有什么线索吗?我收到一个错误:“没有找到适合 BankAccount(double)... 的构造函数”。到目前为止,这是我的代码,感谢您的帮助。

-- 银行账户类--

package atm;

public class BankAccount {
    public double balance; 
    public int accountNumber = 333220; 
    public User user;  
    public BankAccount(){
        balance = 0; 
    }

    public BankAccount(double balance, int accountNumber, User user){ 
        this.balance = balance;
        this.accountNumber = accountNumber; 
        this.user = user; 

    }

    public void accountNumber(){
        accountNumber++;
    }

    public int getAccountNumber(){
        return accountNumber;
    }

    public void deposit (double amount){
        balance += amount; 
    }

    public void withDraw(double amount) {
        balance -= amount;  
    }

    public double getBalance (){
        return balance;  
    }

    public void transfer( BankAccount other,double amount){
        withDraw(amount);
        other.deposit(amount); 
    }


}

-- CheckingAccount 类--

package atm;

public class CheckingAccount extends BankAccount {
    private int transactionCount;
    private static final double transactionFees = 1.50; 
    private static final int freeTransactions = 5; 


    public CheckingAccount (double balance){
        super(balance); //HERE is where I am confused. I only need to use the "balance" 
        transactionCount = 0; 
    }
    public void deposit(double amount){
    transactionCount ++; 
    super.deposit(amount); 
    }

    public void withDraw(double amount){
    transactionCount ++; 
    super.withDraw(amount);
    }
    public void deductFees (){
    if (transactionCount > freeTransactions){
        double fees = transactionFees * (transactionCount - freeTransactions); 
        super.withDraw(fees);
    }
    transactionCount = 0; 
    }
}

非常感谢!

【问题讨论】:

  • 不,要调用任何构造函数或方法,您必须传递与其每个参数对应的合适参数。

标签: java


【解决方案1】:

您需要在BankAccount.java 中创建另一个构造函数,它只初始化amount,如下所示

public BankAccount(double balance){ 
    this.balance = balance;
}

在此处阅读有关在 Java 中使用多个构造函数的信息

http://tutorials.jenkov.com/java/constructors.html

【讨论】:

  • 谢谢,Pankaj!使用多个构造函数肯定帮助我摆脱了我的错误。我读到这不是最好的编码实践,你认为它是否代表应用程序运行的进一步风险,在我的情况下,这是一个非常基本的 Java 练习?
【解决方案2】:

由于CheckingAccountBankAccount,它必须具有BankAccount的所有属性,包括帐号和拥有它的User

基类要求派生类提供accountNumberuser,因此您应该更改构造函数以将此信息转发给super

public CheckingAccount (double balance, int accountNumber, User user){
    super(balance, accountNumber, user);
    transactionCount = 0; 
}

注意 1: 在某些情况下,派生类可以硬编码要传递给 super 的参数;这不是这些情况之一。

注意 2: 考虑将 BankAccount 抽象化,并将其构造函数的可访问性从 public 更改为 protected

【讨论】:

  • 谢谢!我将对如何将类更改为抽象类以及从public 更改为protected 进行一些研究。 :)
猜你喜欢
  • 2012-04-08
  • 1970-01-01
  • 2016-03-21
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 2021-02-15
相关资源
最近更新 更多