對多態性概念還是有點模糊,突然好奇動手寫了一下代碼,感覺明白了。
using System;
namespace 父類子類
{
class Person
{
public Person()
{
Console.WriteLine("我是父類構造函數");
}
public virtual void SayHello()
{
Console.WriteLine("父類SayHello");
}
}
class Son : Person
{
public Son()
{
Console.WriteLine("我是子類構造函數");
}
public override void SayHello()
{
Console.WriteLine("子類SayHello");
}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.SayHello();
Console.WriteLine("===============================");
Son s1 = new Son();
s1.SayHello();
Console.WriteLine("===============================");
Person p2 = new Son();
p2.SayHello();
Console.WriteLine("===============================");
Son s2 = new Son();
Person ps2 = (Person)s2;
ps2.SayHello();
Console.WriteLine("===============================");
Person p3 = new Son();
Son s3 = (Son)p3;
s3.SayHello();
}
}
}
最後還有一種情況值得注意:
子類永遠可以轉換成父類。換句話說,由小指向大永遠不會有問題。
如果父類的引用是子類實例那麼可以通過類型轉換完成。否則會報錯。