繁体   English   中英

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

[英]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!

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

您只能在课堂上使用superthis关键字。 不能在该课程之外使用它们。

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM