多態之虛方法步驟
1)將父類的方法標記爲虛方法,使用關鍵詞virtual,這個函數可以被子類重新寫一遍,override將子類標記;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01多態//實現多態的三種方法:抽象類、虛方法、接口
{
class Program
{
static void Main(string[] args)
{
//概念:讓一個對象能夠表現多重的狀態(類型)
Chinese chinese = new Chinese("劉德華");
Japanese japanese = new Japanese("蒼井空");
Korea korea = new Korea("金秀賢");
Person[] pers = new Person[3] { chinese, japanese, korea };
for (int i = 0; i < pers.Length; i++)
{
pers[i].SayHello();//輸出全是我是人類
// if(pers[i] is Chinese)
// {
// ((Chinese)pers[i]).SayHello();
// }
// else if (pers[i] is Japanese)
// {
// ((Japanese)pers[i]).SayHello();
// }
// else
// {
// ((Korea)pers[i]).SayHello();
// }
}//解決代碼冗餘
Console.ReadKey();
}
}
public class Person
{
private string _name;//字段
public string Name//屬性
{
get => _name;
set => _name = value;
}
public Person(string name)
{
this.Name = name;
}
public virtual void SayHello()
{
Console.WriteLine("我是人類");
}
}
public class Chinese:Person
{
public Chinese(string name):base(name)//父類構造函數
{
}
public override void SayHello()
{
Console.WriteLine("我是中國人,叫{0}", this.Name);
}
}
public class Japanese : Person
{
public Japanese(string name) : base(name)//父類構造函數
{
}
public override void SayHello()
{
Console.WriteLine("我是日本人,叫{0}", this.Name);
}
}
public class Korea : Person
{
public Korea(string name) : base(name)//父類構造函數
{
}
public override void SayHello()
{
Console.WriteLine("我是韓國人,叫{0}", this.Name);
}
}
}