Nehmen wir an, ich habe eine ComponentBase
Klasse, die ein Kind ObjectContextDecorator
und ein Enkel von ist ObjectContext
.
public class ComponentBase extends ObjectContextDecorator {
}
public class ObjectContextDecorator extends ObjectContext {
public void set(String objectTypePath, String characteristicName, Object value) {
//...
}
}
public class ObjectContext {
public void set(String characteristicName, Object value, boolean forced) {
//...
}
}
Die set
Methoden auf ObjectContextDecorator
und ObjectContext
sind sehr ähnlich. Betrachten Sie diesen Beispielcode:
ComponentBase base = new ComponentBase();
base.set(""OTM4E_EFFLEVEL"", ""IE1 / STD"", true);
Die Signaturen beider Methoden passen zu der, die korrekt aufgerufen wird. Ich kann die Signaturen der Methoden nicht ändern, da dies nicht mein Code ist.
Woher weiß der Compiler, welche Methode ich aufrufen wollte?
Ich weiß, dass Sie in der IDE angeben können, welche Methode Sie tatsächlich aufrufen möchten, aber in dieser Situation verwende ich einen Klassenlader, um eine Klasse zu laden, deren Methode den Beispielcode enthält.
"this"
)
String, String, boolean
. Die spezifischste Methode wird aufgerufen. Das ist alles in der JLS.