Java では、次のコードのように、関数の戻り値の型を指定することが許可されています。
public class Test {
static class Dad {
Dad me() {
return this;
}
}
static class Son extends Dad {
Son me() {
return this;
}
}
}
有効です。
ArrayList
クラスを見てみましょう。オーバーライドされclone()
た機能があります(少なくともOracle jdk 1.7ソースで確認できます)
public Object clone() {
try {
@SuppressWarnings("unchecked")
ArrayList<E> v = (ArrayList<E>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}
返さないポイントは何ArrayList<E>
ですかObject
?