Top / C# / いまさらヒトに聞けないこといろいろ / ポリモフィズム

ポリモーフィズムについていろいろ確認してみました。なんだかいろいろJavaとは異なるようですね。

namespace InterfaceSample
{
    public interface IParent
    {
        void execute1();
    }

    public abstract class AParent
    {
        public void execute2()
        {
            Console.WriteLine("親クラスのメソッドです");
        }
    }

    class Child : AParent, IParent
    {

        public void execute1()
        {
            Console.WriteLine("子クラスでinterfaceのメソッドを実装しました");
        }

        public void execute2()
        {
            Console.WriteLine("子クラスでAParentのメソッドをoverrideしたつもり");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IParent iParent = new Child();
            iParent.execute1(); //overrideしたChildのメソッドが呼ばれる

            AParent aParent = new Child();
            aParent.execute2();  //overrideしたChildのメソッドが呼ばれる、、はずが呼ばれない。
        }
    }
}

わりと衝撃的なのが、ポリモフィズムしたつもりでも、

AParent aParent = new Child();
aParent.execute2();  //overrideしたChildのメソッドが呼ばれる、、はずが呼ばれない。

ココは親のメソッドが呼ばれるところです。確かにコンパイラも、サブクラスで同じメソッド名でoverrideしようとすると「親クラスのメソッド隠しちゃうよ」って警告が出ていますね。

01.png

この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / C# / いまさらヒトに聞けないこといろいろ / ポリモフィズム

現在のアクセス:2589


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS