我可以在超类的数组上调用子类吗?

时间:2013-10-27 04:01:30

标签: java arrays inheritance polymorphism

如果我有一个包含子类的对象数组,我可以通过调用数组来访问子类中的方法吗?

这是我 Banking 课程中的一种方法,我想设置检查:

public void deposit() throws IOException {
BufferedReader br;
String entered_amount;

System.out.print("How much would you like to deposit? :");
br = new BufferedReader(new InputStreamReader(System.in));
entered_amount = br.readLine();
double amount = Double.valueOf(entered_amount).doubleValue();
balance = balance + amount;

System.out.println("Your balance is: " + getBalance());

这是我的正在检查类:

public class Checking extends Bankaccount {

private double balance;

public Checking() {
}

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

/**
 * @return the balance
 */
public double getBalance() {
    return balance;
}

/**
 * @param balance the balance to set
 */
public void setBalance(double balance) {
    this.balance = balance;
}

}

在我的主要课程中调用baArray[0]时,有没有办法让存款设置在支票类中的余额值?

我这样做的原因是因为我将对象数组写入文件并在程序启动时重新读取它们。我需要能够存储3组检查和节省。我的存款方法将是我正在尝试编辑以使用继承来设置检查中的余额。

1 个答案:

答案 0 :(得分:1)

添加到Banking班级:

public abstract setBalance(double balance);

如果subclasses类除了BankingChecking以外setBalance方法没有意义,那么您可以实现该方法并简单地使用它抛出一个例外。 (虽然Savings类也有setBalance方法,但似乎也是有意义的。)

或者,您可以将Checking的{​​{1}}方法移至超类setBalance,然后BankingChecking将继承Savings 1}}方法。如果你需要覆盖它们,你可以,没问题。

编辑:根据对这个答案的评论,现在我更清楚你要完成什么。

如果您打算拥有一组setBalance个对象,并且每个对象都有一个唯一的帐号,并且对于每个Banking帐户,都有一个Bank帐户和一个Checking帐户,然后从逻辑上讲,听起来SavingsChecking只能通过Savings类访问的private类更有意义。

因此,当帐户持有人进入银行时,他们会开设Banking帐户。默认情况下,这可能包含1个Banking帐户和1个Checking帐户。这些是Savings类中的类变量:

Banking

现在,您的private Checking checking; private Savings savings; 课程需要公共方法来访问支票和储蓄帐户。

假设您的BankingChecking课程都有SavingsgetBalance。现在,您的setBalance课程需要Banking& setter适用于每种类型的帐户,只需调用相应的方法。

例如,在getter课程中:

Banking

然后在您的main方法中,您将通过以下方式使用这些方法:

public void setCheckingBalance(double balance)
{
    checking.setBalance(balance);
}

public double getCheckingBalance()
{
    return checking.getBalance();
}