我本来想调用 super.super.method() 但你不能在 java 中这样做。并且有几个问题和很多像
这样的答案,
但在这种情况下没有一个会起作用。
这不是“糟糕的设计”或破坏封装的问题。我有一个真正的用例,我需要覆盖第三方类,因为它有一个错误,我正在寻找一个好的解决方案。
所以我正在寻求解决方案的情况是:
类 ContextGetter 和 SpecialContextGetter 在第三方类库中。SpecialContextGetter 中的 getContext 方法有一个错误(它将 i 设置为 8 而不是 7)。
我想修复它。所以我用 SpecialContextGetterCorrected 扩展了 SpecialContextGetter,在其中我重新实现了 getContext(从 SpecialContextGetter 复制它并进行了更改)并指示框架使用我的类 SpecialContextGetterCorrected,而不是 SpecialContextGetter。
问题是我的新方法仍然需要调用 ContextGetter.getContext 并且我不能告诉 Java 这样做。(我想调用 super.super.getContext)
如果不将我自己的 com.thirdparty.SpecialContextGetter 放在类路径前面,我该如何完成呢?
package com.thirdparty;
class ContextGetter {
//has several state variables
public Context getContext(Set x) throws Exception {
/* uses the state vars and its virtual methods */
/* may return a Context or throw an Exception */
}
/* other methods, some overridden in SpecialContextGetter */
}
class SpecialContextGetter {
//has several state variables
public Context getContext(Set x) throws Exception {
/* uses the state vars and its virtual methods */
/* somewhere in it it contains this: */
if (isSomeCondition()) {
try {
// *** in my copied code i want to call super.super.getContext(x) ***
Context ctxt=super.getContext(x);
/* return a modified ctxt or perhaps even a subclass of Context */
} catch( Exception e) {
/* throws new exceptions as well as rethrows some exceptions
depending on e and other state variables */
}
else {
/* some code */
int i=8; // *** this is the bug. it should set i to 7 ***
/* may return a Context or throw an Exception */
}
}
/* other methods, some overridden in SpecialContextGetter */
}