石井です.
> - no covariant return types
> ?
親クラスからオーバライドするメソッドで,返り値クラスA をその子クラス
Bに変更できる,というのが covariant return type ではなかったかと.
C++ではこんな感じでしょうか.
class SuperRet {};
class SubRet : public SuperRet{};
class Super
{
public:
virtual SuperRet* foo()
{
return new SuperRet();
}
};
class Sub : public Super
{
public:
virtual SubRet* foo()
{
return new SubRet();
}
};
静的型付け言語でこれができないと,例えば Prototype パターンを
実装するのにダウンキャストを頻繁に使うはめになるでしょうね.
Javaで試してみたけどだめみたいでした.
ちなみにcovariant (共変性)という言葉は,数学でいうところの
テンソル解析からきているのではないかと思います.たぶん.