繁体   English   中英

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

[英]can I call subclasses on an array of a superclass?

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

这是银行类中的一种方法,我想设置检查:

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());

这是我的Checking课:

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套支票和储蓄。 我的存款方法将是我尝试编辑以使用继承设置支票余额的方法。

添加到您的Banking课程:

public abstract setBalance(double balance);

如果除了setBalance方法没有意义的Checking类之外,还有Banking subclasses ,则可以实现该方法,并使其简单地引发异常。 (对于Savings类,虽然也有setBalance方法似乎setBalance 。)

或者,您可以将CheckingsetBalance方法移至超类Banking ,然后CheckingSavings都将继承setBalance方法。 如果您需要覆盖它们,可以没有问题。

编辑:根据对此答案的评论,现在对我来说更清楚了您要完成的工作。

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

因此,当帐户持有人去银行时,他们会开设一个Banking帐户。 也许默认情况下,它带有1个Checking帐户和1个Savings帐户。 这些将是您的Banking类中的类变量:

private Checking checking;
private Savings savings;

现在,您的Banking类需要公共方法来访问支票帐户和储蓄帐户。

假设您的Checking and Savings类都具有getBalancesetBalance 现在,您的Banking类将为每种类型的帐户都需要一个settergetter ,它只是调用适当的方法。

例如,在您的Banking课程中:

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

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

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

baArr[0].setCheckingBalance(100.00);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM