我有一个A类:
A
- void method1
扩展A的B级覆盖了A的方法1:
B->A
- void method1
稍后,我创建一个B实例,引用为A:
A a = new B();
我想在特定情况下使用方法1的A版本。有没有办法称之为:
a.super.method1();
为了消除任何困惑,我正在努力实现这一目标:
我有一个名为Account的父类。在我的下面我有3个子类,SavingsAccount,CheckingAccount和MoneyMarketAccount。
每种方法都有自己的存款/取款方式,这些方法与其相关的具体费用。
有一个名为Bank的管理器类,其中包含一个Account对象的ArrayList。我有一个方法void transfer
,我试图创建这个方法,允许我拿两个帐户并在它们之间转移资金。
如果没有足够的资金或其他错误,有时不同的方法会抛出异常,所以如果两个账户中的一个账户失败,我需要能够撤销交易。
这是我遇到问题的地方:
如果from-account
无法收到存款,我需要重新存入从to-account
提取的款项,但to-account
可能会收取存款费用,所以我想要拨打父帐户类的存款方式,因为它没有任何相关费用;但是,根据我收到的评论和答案,我可能只需编写另一种不被覆盖的方法,只需执行与账户存款相同的操作。
答案 0 :(得分:3)
你不能直接使用super,因为它只存在于B的里面但你可以间接地做到:
public B extends A {
public void method1() {
// B's method 1
}
public void superMethod1() {
super.method1();
}
}
因此,如果一个类使用B变量,那么他们可以调用superMethod1()
并获得A的方法1。
但是说过这个,这对A变量不起作用,因为你的代码目前已设置,而不是没有强制转换。
即,你可以这样做:
B b = new B();
b.superMethod1();
但这对您的设置无效:
A a = new B();
// not without casting
((B)a).superMethod(); // ugh... ugly! AND dangerous!
请注意,您的问题虽然本身并不差,但表明可能是一个糟糕的程序设计,而且需要此代码的代码至少对我来说是一个糟糕的代码味道。
答案 1 :(得分:0)
您只能在课程中拥有super
或this
个关键字。你不能在该类之外使用它们。
所以在课堂上你可以做(模拟代码)
class A {
someMethod(){
super. someMethod()
}
}
答案 2 :(得分:0)
您无法通过客户端代码执行此操作,即。调用方法的代码。您只能在子类方法
中执行此操作super.method1();
,仅适用于层次结构的一个级别。
答案 3 :(得分:0)
使用A a = new A();
或者你可以从B的method1调用super.method1(),如果你想像A a = new B();
那样