// 下階層用テンプレート #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;}