- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#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;}