スーパークラスがあるとします。this
そのスーパー クラスでは、それ自体のランタイム オブジェクト ( ) をパラメーターとしてオーバーロードされたメソッドに渡します。トリックは、このオーバーロードされたメソッドがサブクラス タイプによってオーバーロードされることです。あなたがそれをしようとすると、あなたは得るでしょう
メソッド ... は適用できません (実引数 ... はメソッド呼び出し変換で ... に変換できません)
代わりに、(正しいランタイム クラスを取得するためだけに) サブタイプごとにメソッドを個別に実装する必要があります。これは、メソッドの内容が同一である場合、多くの重複作業になります。
例えば:
public class InferTypeTest {
public static void main(String[] args) {
SubClass1 s1 = new SubClass1();
s1.sayHi();
}
public static void sayHi(SubClass1 clz) {
System.out.println("clz 1");
}
private abstract static class SuperClass{
public void sayHi() {
InferTypeTest.sayHi(this);
}
}
private static class SubClass1 extends SuperClass{
}
}