程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中一些易混淆概念總結(七)---------解析抽象類,抽象方法

C#中一些易混淆概念總結(七)---------解析抽象類,抽象方法

編輯:C#入門知識

我筆記本上C#方面的知識基本上整理的差不多了,所以這個關於《C#小知識》的系列估計就要完結了,這個過程中謝謝大家一直來對於我的支持,你們給我的寶貴的意見對我幫助很大。   在介紹抽象類和抽象方法之前還是先提一下多態的基本概念。   其實在上一篇關於裡氏替換原則就已經說明了多態的精髓“子類對象可以替換父類對象的位置,而程序的功能不受影響”。還是來看一段代碼吧:   復制代碼 /// <summary>     /// Create By:ZhiQiang     /// Create Time:2014-2-9     /// </summary>     class Person     {                //定義虛方法以備子類重寫,當子類替換父類對象的位置時,可以表現出多態         public virtual void Run()         {             Console.WriteLine("我是人,我會跑!");         }           public virtual void Say()         {             Console.WriteLine("我是人,我會說話!");         }     } 復制代碼 子類的代碼如下:   復制代碼     //定義Teacher類繼承Person     class Teacher:Person     {         public override void Run()         {             Console.WriteLine("我是老師,我必須慢速跑");         }           public override void Say()         {             Console.WriteLine("我是老師,我得說表揚的話!");         }       }       //定義Student類繼承Person     class Student : Person     {         //子類重寫了父類的虛方法         public override void Run()         {             Console.WriteLine("我是學生,我會加速跑!");         }           public override void Say()         {             Console.WriteLine("我是學生,我會說英語!");         }     } 復制代碼 下面需要一個實現多態的類,代碼如下:   復制代碼     //實現多態的類     class FeatureHuman     {         /// <summary>         /// 這個方法就提現了多態,當傳入的是子類的對象的時候,p指向的是子類對象,就可以調用子類重寫父類方法後的方法         /// </summary>         /// <param name="p">父類或者子類對象</param>         public void OutPutFeature(Person p)         {             p.Run();             p.Say();         }     } 復制代碼     主體代碼和實現多態的方法如下:   復制代碼     class Program     {         static void Main(string[] args)         {             //人的特點             Person p = new Person();               Program pro = new Program();             pro.OutPutFeature(p);             //學生的特點             Student s = new Student();             pro.OutPutFeature(s);             //老師的特點             Teacher t = new Teacher();             pro.OutPutFeature(t);               Console.ReadKey();         }     } 復制代碼 運行,打印結果如下:           這裡可以發現,我們outputFeature方法根據傳入的實體對象不同(父類變量指向了子類的對象),而打印出了不同人物的特點,這就是多態。   代碼圖解如下:       多態總結如下:           二,抽象類和抽象方法   在C#中使用abstract關鍵字修飾的類和方法,叫做抽象類和抽象方法。   1)抽象類中可以擁有沒抽象成員,為了繼承給他的子類調用 (抽象類就是為了定義抽象成員,繼承給子類去實現,同時子類也可以調用父類的非抽象成員)   復制代碼 abstract  class Person     {        //private int nAge;          //abstract string strName;          //抽象類可以包含不抽象的成員,可以給繼承的子類使用        public void Say()        {            Console.WriteLine("我是父類,我是人!");        }          public virtual void Sing()        {            Console.WriteLine("我是父類,我是人,我可以唱歌!");        }          //Run的抽象方法        public abstract void Run();     } 復制代碼 2)抽象類中可以有virtual修飾的虛方法   如上面的代碼,在抽象類中定義了virtual修飾的方法,編譯通過。抽象類就是為了定義抽象成員,繼承給子類去實現,所以子類也可以實現抽象類中的虛方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved