父级的调用方法,即使子级重写了它? [重复]

问题描述 投票:-1回答:2

想象一下我有一个这样的课程:

public class Alpha {

   int i = 5;

   @Override
   public String toString() {
       return "Alpha [i=" + i + "]";
   }

   public String superToString() {
       return super.toString();
   }

}

然后我要做一个主要的:

Alpha o = new Alpha();
System.out.println(o.toString()); // display ==> Alpha [i=5]
System.out.println(o.superToString()); // display ==> pojos.Alpha@77468bd9

一切正常。现在,假设我在Alpha中没有名为superToString()的方法。有没有一种方法可以调用我的Alpha实例的父方法? (在此示例中,为Object的toString)

java overriding hierarchy extends
2个回答
3
投票

如果子类重写方法,则不再可能从另一个类调用重写的方法。无法解决此问题。

使用反射将无济于事:

var alpha = new Alpha();
var aMethod = alpha.getClass().getSuperclass().getMethod("toString");
System.out.printf("For method %s() in super class %s the call still results in \"%s\"%n",
        aMethod.getName(), aMethod.getDeclaringClass().getSimpleName(),
        aMethod.invoke(alpha));

结果:

For method toString() in super class Object the call still results in "Alpha [i=5]"

问题是,任何允许您执行此操作的机制都在根本上破坏了封装和抽象。


0
投票

这被子类称为方法重写。类“ Alpha”具有重写方法“ toString”。如果未指定,则Class Object为默认超类。

您可以在重写的方法中捕获super的toString并将其追加/添加到响应中

@Override
public String toString(){
  String superToString = super.toString();
  return superToString + " -> Alpha [i=" + i + "]";
}
© www.soinside.com 2019 - 2024. All rights reserved.