java - 我可以在父类(super class)的数组上调用子类吗?

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

这是我的检查类(class):

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

如果除了 Checking 类之外,您还有 Banking子类,而 setBalance 方法无法实现该子类感觉,那么您可以实现该方法并简单地让它抛出异常。 (尽管 Savings 类也有一个 setBalance 方法似乎是有意义的。)

或者,您可以将 CheckingsetBalance 方法移至父类(super class) Banking,然后移至 Checking和 Savings 都将继承 setBalance 方法。如果您需要覆盖它们,可以,没问题。

编辑:根据对此答案的评论,我现在更清楚您要实现的目标。

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

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

private Checking checking;
private Savings savings;

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

假设您的 CheckingSavings 类都有一个 getBalancesetBalance。现在,您的 Banking 类需要为每种类型的帐户提供一个 settergetter,并且它只调用适当的方法。

例如,在您的Banking 类中:

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

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

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

baArr[0].setCheckingBalance(100.00);

关于java - 我可以在父类(super class)的数组上调用子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614492/

相关文章:

c++ - 为什么是虚拟析构函数?

java - 如何重新排列wordcount hadoop输出结果并按值排序

java - 使用 VLC 命令行获取网络摄像头列表

javascript - 如何对二进制数组执行一个二进制操作?

javascript - 关于数组创建的思考

java - 为什么总是调用父类(super class)构造函数

python - __deepcopy__ 和在 __init__ 中改变参数的继承

java - 如何在Java类中访问HTTP请求

java - Play Framework 2.1 - 在开发模式下静态内容的请求和加载非常慢

char*[] 元素每个占用 4 个字节,而 char[] 每个元素占用 1 个字节?