Supongamos que tengo una ComponentBase
clase, de quien es hijo ObjectContextDecorator
y nieto 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) {
//...
}
}
Los set
métodos en ObjectContextDecorator
y ObjectContext
son muy similares. Considere este código de muestra:
ComponentBase base = new ComponentBase();
base.set(""OTM4E_EFFLEVEL"", ""IE1 / STD"", true);
Las firmas de ambos métodos se ajustan a la que se llama correctamente. No puedo cambiar las firmas de los métodos ya que no es mi código.
¿Cómo sabe el compilador a qué método pretendía llamar?
Sé que en el IDE puedes señalar a qué método realmente quieres llamar, pero en esta situación, estoy usando un cargador de clases para cargar una clase que tiene un método que contiene el código de muestra.
"this"
)
String, String, boolean
. Se llamará al método más específico. Todo esto está en el JLS.