// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

ポリモーフィズムについていろいろ確認してみました。なんだかいろいろ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しようとすると「親クラスのメソッド隠しちゃうよ」って警告が出ていますね。


#ref(01.png)

----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}



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