Java继承调用对象的超类的方法

时间:2014-04-17 04:51:28

标签: java inheritance

我有一个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可能会收取存款费用,所以我想要拨打父帐户类的存款方式,因为它没有任何相关费用;但是,根据我收到的评论和答案,我可能只需编写另一种不被覆盖的方法,只需执行与账户存款相同的操作。

4 个答案:

答案 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)

您只能在课程中拥有superthis个关键字。你不能在该类之外使用它们。

所以在课堂上你可以做(​​模拟代码)

class A {    
  someMethod(){    
  super. someMethod()
 }
}

答案 2 :(得分:0)

您无法通过客户端代码执行此操作,即。调用方法的代码。您只能在子类方法

中执行此操作
super.method1();

,仅适用于层次结构的一个级别。

答案 3 :(得分:0)

使用A a = new A();或者你可以从B的method1调用super.method1(),如果你想像A a = new B();那样