Index: [Article Count Order] [Thread]

Date:  Wed, 28 Jun 2000 09:54:31 +0900
From:  "Masaru Ishii" <mishii@....jp>
Subject:  [XP-jp:00557] RE:  MS C# リリース
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <NEBBLCBLMJKDLAMIAMIGCENECIAA.mishii@....jp>
In-Reply-To:  <39581B563D4.6D0EY-KAMITE@....jp>
Posted:  Wed, 28 Jun 2000 09:55:15 +0900
X-Mail-Count: 00557

石井です.

>    - 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 (共変性)という言葉は,数学でいうところの
テンソル解析からきているのではないかと思います.たぶん.