【发布时间】:2017-05-17 17:01:12
【问题描述】:
我有一个名为 BankAccount 的类(定义为抽象类),它是我的超类和两个名为 SavingsAccount 和 CheckingAccount 的子类。
它们都使用 BankAccount 中定义的提款方法,但是 CheckingAccount 可以透支,而 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");
}
}
我问这个是因为经过一些研究后,我发现您无法覆盖子类中超类的参数,所以这让我想知道这是如何完成的。 SavingsAccount 类将有其自己的属性等,为了清楚起见(以防您想知道),我将其省略了。
我知道在 CheckingAccount 和 SavingsAccount 中放置一个withdraw 方法会简单得多,但由于它们都提取资金,我想看看是否可以在超类中使用它。
【问题讨论】:
-
你在尝试类似
this instanceof SavingsAccount的东西吗? -
你的父类不应该知道它的子类。
-
为什么要在账户的构造函数中取钱?
-
嗯,这是一些练习,但经过反思,我明白了你的观点,撤回不应该添加到构造函数中,我只是想向构造函数添加尽可能多的“通用东西”可能出于测试目的。
标签: java object if-statement superclass