私が持っていると仮定しましょうComponentBase
の子で、クラス、ObjectContextDecorator
およびの孫を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) {
//...
}
}
set
上の方法ObjectContextDecorator
とはObjectContext
非常にsimillarです。次のサンプルコードを考えてみます。
ComponentBase base = new ComponentBase();
base.set(""OTM4E_EFFLEVEL"", ""IE1 / STD"", true);
両方のメソッドのシグネチャは、正しく呼び出されているものに適合します。コードではないため、メソッドのシグネチャを変更できません。
コンパイラーは、どのメソッドを呼び出すつもりだったかをどのようにして知るのですか?
IDEで実際に呼び出すメソッドを指摘できることは知っていますが、この状況では、クラスローダーを使用して、サンプルコードを含むメソッドを持つクラスをロードしています。
"this"
String, String, boolean
。最も具体的なメソッドが呼び出されます。これはすべてJLSにあります。