gpt4 book ai didi

Java继承调用对象父类(super class)的方法

转载 作者:行者123 更新时间:2023-11-29 05:24:41 25 4
gpt4 key购买 nike

我有一个 A 类:

A
- void method1

还有一个扩展 A 的类 B,它覆盖了 A 的方法 1:

B->A
- void method1

稍后,我创建了一个引用为 A 的 B 实例:

A a = new B();

我想在特定情况下使用 A 版本的 method1。有没有办法调用它,例如:

a.super.method1();

编辑:

为了消除任何混淆,这是我要完成的事情:

我有一个名为 Account 的父类。在它下面我有 3 个子类,SavingsAccount、CheckingAccount 和 MoneyMarketAccount。

其中每一个都有自己的存款/取款方法,并有与之相关的特定费用。

有一个名为 Bank 的管理器类,其中包含一个 Account 对象的 ArrayList。我有一个方法,void transfer,我正在尝试创建它,它将允许我使用这两个帐户并在它们之间转账。

有时,如果资金不足或其他错误,不同的方法会抛出异常,因此我需要能够在两个账户之一失败时撤销交易。

这是我遇到问题的地方:

如果to-account收不到钱,我需要重新存入from-account的钱,但是to-account 可能有存款费用,所以我只想调用父 Account 类的存款方法,因为它没有任何相关费用;然而,根据我收到的评论和答案,我可能不得不编写另一个未被覆盖的方法,它只执行与帐户存款相同的操作。

最佳答案

您不能直接使用 super,因为它只存在于 B 的内部。但您可以间接使用:

public B extends A {
public void method1() {
// B's method 1
}

public void superMethod1() {
super.method1();
}
}

因此,如果一个类使用 B 变量,那么他们可以调用 superMethod1() 并获取 A 的 method1。

但是话虽如此,这对 A 变量不起作用,因为您的代码当前已设置,并非没有强制转换。

即,您可以:

B b = new B();
b.superMethod1();

但这不适用于您的设置:

A a = new B();
// not without casting
((B)a).superMethod(); // ugh... ugly! AND dangerous!

请注意,您的问题虽然本身不​​错,但表明可能是一个糟糕的程序设计和需要它的代码至少对我来说,有一种糟糕的代码味道。

关于Java继承调用对象父类(super class)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124861/

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