C#之多態
阿新 • • 發佈:2019-05-08
ons ase ring string ++ 實體 con per wan
多態:讓一個類能夠表現多種狀態(類型)。
實現多態的3種手段:虛方法,抽象類,接口
1、先介紹虛方法,父類方法用virtual標記(public virtual void SayHello() {......}),子類方法用override標記(public override void SayHello(){......}),父類中放入子類,當調用父類方法時會自動使用子類方法
舉例說明
using System; namespace virsual_override { // class Program { static voidMain(string[] args) { //English en1 = new English("Jim"); //English en2 = new English("Lucy"); //Korea kr1 = new Korea("金秀賢"); //Korea kr2 = new Korea("金正恩"); //Persion[] pers = { en1, en2, kr1, kr2 }; Persion[] pers = { newEnglish("Jim"),new English("Lucy"),new Korea("金秀賢"),new Korea("金正恩")}; for (int i = 0; i < pers.Length; i++) { pers[i].SayHello(); } Console.Read(); } } class Persion { public string Name { get; set; } public Persion(string name) { this.Name = name; } public virtual void SayHello() { Console.WriteLine("我是人類"); } } class English : Persion { public string Name { get; set; } public English(string name) : base(name) { this.Name = name; } public override void SayHello() { Console.WriteLine("我是{0}", this.Name); } } class Korea : Persion { public string Name { get; set; } public Korea(string name) : base(name) { this.Name = name; } public override void SayHello() { Console.WriteLine("我是{0}", this.Name); } } }
結果顯示:
2、抽象類
當父類中的方法不知道怎麽實現的時候,可以考慮把父類寫成抽象類,把方法寫成抽象方法。
using System; namespace abstract_fangfa { class Program { static void Main(string[] args) { //Animal a = new Animal();這樣會報錯,抽象類不循序實體化 Animal a = new Dog(); a.Bark(); Console.Read(); } } public abstract class Animal { public abstract void Bark(); } public class Dog:Animal { public override void Bark() { Console.WriteLine("Dog wangwang Barking"); } } public class cat : Animal { public override void Bark() { Console.WriteLine("Dog miaomiao Barking"); } } }
結果
3、接口是一種規範,能力
C#之多態