C#多态性的小记,父类,子类,虚方法,接口
一.父類,子類的繼承和虛方法重寫
?
class Program{static void Main(string[] args){Person objperson= new Person ();//實例person類objperson.My();objperson.num();Student objstudent= new Student();//實例person類objstudent.My();objstudent.num();}public class Person //父類{public string My() {return "我是人類";}public virtual string num(){return "我人類沒有";}} public class Student:Person //子類{public override string num(){return "我學生沒有";}}結果顯示:
?
二.什么時候用抽象方法?虛方法和抽象的區別
方法里邊沒有抽象體,不需要對其他事物進行描述,但是其他類都有這個行為,這個時候采用抽象方法。
里面沒有具體的方法體,? 繼承者,負責重寫里面的方法
抽象方法無法實例化,抽象類只能用作基類
1、Virtual方法(虛方法)
virtual 關鍵字用于在基類中修飾方法。virtual的使用會有兩種情況:
情況1:在父類中定義了virtual方法,但在子類中沒有重寫該虛方法。那么在對子類實例的調用中,該虛方法使用的是父類定義的方法。
情況2:在父類中定義了virtual方法,然后在子類中使用override重寫該方法。那么在對子類實例的調用中,該虛方法使用的是子類重寫的方法。
2、Abstract方法(抽象方法)
abstract關鍵字只能用在抽象類中修飾方法,并且沒有具體的實現。抽象方法的實現必須在子類中使用override關鍵字來實現。
接口和抽象類最本質的區別:抽象類是一個不完全的類,是對對象的抽象,而接口是一種行為規范。
a)???? virtual修飾的方法必須有方法實現(哪怕只有一對大括號),abstract修飾的方法不能有實現。
b)??? virtual可以被子類重寫,abstract必須被子類重寫
c)???? 如果類中的某一函數被abstact修飾,則類名也必須用abstact修飾
d)??? Abstract修飾的類不能被創建實例。
e)???? C#中如果準備在子類重寫父類的方法,則該方法在父類中必須用virtual修飾,在子類中必須用overide修飾,避免了程序員在子類中不小心重寫了父類父類方法。
注:用abstract修飾的類只能被繼承不能夠被實例化。
?
三.接口
class Program{static void Main(string[] args){Fly objfly=new Person(); //接口實例化 objfly.fly();objfly.run();objfly= new Student(); //接口實例化 objfly.fly();objfly.run();}public class Person:Fly //父類 {public string My() {return "我是人類";}public virtual string num(){return "我人類沒有";}string Fly.fly() //接口實現方法 {return "我是人類,我會飛";}string Fly.run() //接口實現方法 {return "我是人類,我在工作";}} public class Student:Person,Fly //子類 {public override string num(){return "我學生沒有";}string Fly.fly(){return "我是學生,我會飛";}string Fly.run(){return "我是學生,我在工作";}}public interface Fly{string fly();string run();}}結果:
?
其中接口,和繼承接口的類實例化,可以做到多態,以及替換,比如定義接口對象,可以初始化為任意繼承它的實體對象,而能使用的方法和屬性只有接口聲明的那些。
?
接口屬性定義使用
?
class Program{static void Main(string[] args){Fly objfly=new Person(); //接口實例化objfly.Age = 18;objfly.AgeNow();Console.WriteLine(objfly.Age.ToString());objfly= new Student(); //接口實例化objfly.Age = 10;objfly.AgeNow();Console.WriteLine(objfly.Age.ToString());}public class Person:Fly //父類 {public string My() {return "我是人類";}public virtual string num(){return "我人類沒有";}string Fly.fly() //接口實現方法 {return "我是人類,我會飛";}string Fly.run() //接口實現方法 {return "我是人類,我在工作";}int Fly.Age{get{return age;}set{age = value;}}void Fly.AgeNow(){Console.WriteLine("我是人類年齡:" + age);age = age + 1;}} public class Student:Person,Fly //子類 {public override string num(){return "我學生沒有";}string Fly.fly(){return "我是學生,我會飛";}string Fly.run(){return "我是學生,我在工作";}int Fly.Age{get{return age;}set{age = value;}}void Fly.AgeNow(){Console.WriteLine("我是學生年齡:" + age);age = age + 1;}}public interface Fly{int Age{get;set;}void AgeNow();string fly();string run();}}?
最后結果:
?
轉載于:https://www.cnblogs.com/FHL007/p/11113699.html
總結
以上是生活随笔為你收集整理的C#多态性的小记,父类,子类,虚方法,接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NRF52810能不能替代NRF5283
- 下一篇: Docker 运行的 应用程序无法连接O