Der Aufruf von super.super.method() ist sinnvoll, wenn Sie den Code der Basisklasse nicht ändern können. Dies ist häufig der Fall, wenn Sie eine bestehende Bibliothek erweitern.
Fragen Sie sich zunächst, warum Sie diese Klasse erweitern? Wenn die Antwort lautet: "Weil ich sie nicht ändern kann", dann können Sie ein genaues Paket und eine genaue Klasse in Ihrer Anwendung erstellen und die unanständige Methode umschreiben oder einen Delegaten erstellen:
package com.company.application;
public class OneYouWantExtend extends OneThatContainsDesiredMethod {
// one way is to rewrite method() to call super.method() only or
// to doStuff() and then call super.method()
public void method() {
if (isDoStuff()) {
// do stuff
}
super.method();
}
protected abstract boolean isDoStuff();
// second way is to define methodDelegate() that will call hidden super.method()
public void methodDelegate() {
super.method();
}
...
}
public class OneThatContainsDesiredMethod {
public void method() {...}
...
}
Sie können zum Beispiel Folgendes erstellen org.springframework.test.context.junit4.SpringJUnit4ClassRunner Klasse in Ihrer Anwendung, so dass diese Klasse vor der eigentlichen Klasse aus jar geladen werden sollte. Schreiben Sie dann Methoden oder Konstruktoren um.
Achtung! Dies ist ein absoluter Hack, dessen Verwendung NICHT empfohlen wird, aber er funktioniert! Die Verwendung dieses Ansatzes ist wegen möglicher Probleme mit Klassenladern gefährlich. Außerdem kann dies jedes Mal Probleme verursachen, wenn Sie eine Bibliothek aktualisieren, die eine überschriebene Klasse enthält.