Suponhamos que eu tenha uma ComponentBase
turma, filha ObjectContextDecorator
e neta de 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) {
//...
}
}
Os set
métodos ObjectContextDecorator
e ObjectContext
são muito semelhantes. Considere este código de exemplo:
ComponentBase base = new ComponentBase();
base.set(""OTM4E_EFFLEVEL"", ""IE1 / STD"", true);
As assinaturas dos dois métodos se encaixam na que está sendo chamada corretamente. Não consigo alterar as assinaturas dos métodos, pois esse não é o meu código.
Como o compilador sabe qual método eu pretendia chamar?
Eu sei que no IDE você pode apontar para qual método você realmente deseja chamar, mas nessa situação, estou usando um carregador de classes para carregar uma classe que possui um método que contém o código de exemplo.
"this"
)
String, String, boolean
. O método mais específico será chamado. Isso tudo está no JLS.