gpt4 book ai didi

java - 如果在父类(super class)中定义了方法,如何根据调用它的对象更改结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:30 25 4
gpt4 key购买 nike

我有一个名为 BankAccount 的类(定义为抽象类),它是我的父类(super class)和两个子类,分别称为 SavingsAccount 和 CheckingAccount。

它们都使用 BankAccount 中定义的 withdraw 方法,但是 CheckingAccount 可以 overdraw ,而 SavingsAccount 则不能。

我的问题是,如果我们在 BankAccount 构造函数中包含以下内容:

public BankAccount(double balanceIn, double withdrawIn)
{
balance = balanceIn;
withdraw = withdrawIn;
}

可以通过以下方式从 SavingsAccount 类调用:

public SavingsAccount(double balanceIn, double withdrawIn)
{
// initialise instance variables
super (balanceIn, withdrawIn);

}

是否有一种方法可以根据构造函数是从 CheckingAccount 类还是从 SavingsAccount 类调用来更改方法的响应方式

例如(这只是为了表达而不是真正的代码,而是在 BankAccount 类中定义的一个方法,它本质上是这样做的)

public void setWithdraw(double withdrawIn)
{
withdraw = withdrawIn;


if (withdrawIn is called from savingsAccount && balance < withdrawIn)
{
System.out.print("You have insufficient funds");
}
else
{
balance = balance - withdrawIn;
System.out.print("Funds Withdrawn");
}
}

我问这个是因为经过一些研究我发现你不能覆盖子类中父类(super class)的参数所以我想知道这是怎么做到的。 SavingsAccount 类会有自己的属性等,为了清楚起见,我将它们省略了(以防万一你想知道)。

我知道在 CheckingAccount 中放置一个 withdraw 方法,在 SavingsAccount 中放置另一个方法会简单得多,但由于它们都提取资金,我想看看是否有可能将它放在父类(super class)中。

最佳答案

您可以使用方法的覆盖:

public class BankAccount {
public BankAccount(double balanceIn, double withdrawIn) {
balance = balanceIn;
setWithdrawn(withdrawIn);
}

protected void setWithdrawn(double withdrawIn) {
// do the base stuff like withdraw = withdrawIn;
}
}

第二类:

public class SavingsAccount extends BankAccount {
public BankAccount(double balanceIn, double withdrawIn) {
super(balanceIn, withdrawIn);
}

// overwrite setWithdrawn
@Override
protected void setWithdrawn(double withdrawIn) {
// do the specific stuff like the code of setWithdrawn in your post
}
}

关于java - 如果在父类(super class)中定义了方法,如何根据调用它的对象更改结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com