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