[英]JAVA: what happend when i call a getter method of a object which actually extend the method from it's superClass
[英]Java inheritance call object's superclass's method
我有一个A类:
A
- void method1
并且扩展A的B类覆盖A的方法1:
B->A
- void method1
稍后,我创建了一个引用为A的B实例:
A a = new B();
我想在特定情况下使用方法1的A版本。 有没有办法称之为,如:
a.super.method1();
为了消除任何困惑,这是我想要实现的目标:
我有一个名为Account的父类。 在那之下我有3个子类,SavingsAccount,CheckingAccount和MoneyMarketAccount。
其中每一种都有自己的存款/取款方式,这些方法具有与之相关的特定费用。
有一个名为Bank的管理器类,其中包含一个Account对象的ArrayList。 我有一个方法,无法void transfer
,我试图创建,这将允许我拿两个帐户,并在他们之间转移资金。
如果没有足够的资金或其他错误,有时不同的方法会抛出异常,所以如果两个账户中的一个账户失败,我需要能够撤销交易。
这是我遇到问题的地方:
如果to-account
无法收到存款,我需要重新存入从from-account
提取的款项,但是to-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!
请注意,你的问题,虽然本身并不坏,但表明可能是一个糟糕的程序设计和需要它的代码至少对我来说,代码味道很差。
您只能在课堂上使用super
或this
关键字。 您不能在该课程之外使用它们。
所以在课堂上你可以做(模拟代码)
class A {
someMethod(){
super. someMethod()
}
}
你不能从客户端代码那里做到这一点,即。 调用方法的代码。 您只能在子类方法中执行此操作
super.method1();
并且仅适用于层次结构的一个级别。
使用A a = new A();
或者你可以从B的方法1调用super.method1(),如果你想要像A a = new B();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.