1 つの解決策は、子クラスのメソッドをオーバーライドし、戻り値の型をより具体的なものに変更することです。子供のタイプ。これにはキャストが必要です。(Child)
典型的なキャストを使用する代わりに、Class#cast(Object)
メソッドを使用します
public class Parent {
public Parent example() {
System.out.println(this.getClass().getCanonicalName());
return this;
}
}
public class Child extends Parent {
public Child example() {
return Child.class.cast(super.example());
}
public Child method() {
return this;
}
}
キャストは標準メソッド内に隠されています。のソースからClass
。
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj));
return (T) obj;
}