国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

小學生之面向對象的三大特征(封裝、繼承、多態)

2019-11-17 02:16:19
字體:
來源:轉載
供稿:網友

小學生之面向對象的三大特征(封裝、繼承、多態)

在前一篇文章中,我們講了面向對象的特征之一(封裝),那么今天我們來了解面向對象的剩余兩大特性。

一、繼承1、定義 繼承就是從父類中獲取一些公開的成員,如方法和屬性。C#中只允許繼承一個父類,但允許繼承多個接口。如果子類繼承接口,則必須實現接口中定義的所有公開成員。 公開成員是指在父類中定義為public的成員(public的作用域可在子類中生效,而PRivate作用域則不可)子類繼承父類:子類擁有父類非Private的屬性和功能;子類具有自己的屬性和功能,即子類可以擴展父類沒有的屬性和功能;子類還可以以自己的方式實現父類的功能(方法重寫)

2、繼承的兩大特性:

  001.單根性:一個子類不能同時繼承多個父類。

  002. 傳遞性:如果有一個類A繼承與類B,又有一個類C繼承與類A,那么類C也可以使用類B中非私有的字段,屬性和方法。

3.子類構造執行流程?

解析:第一步:先進入子類構造參數列表

第二步:進入父類對應的構造

第三步:執行父類構造的方法體

第四步:回到子類方法體執行.

4、優點 繼承使得所有子類公共部分都放在父類中,使得代碼得到共享,這就避免了重復。此外,繼承可使得修改或擴展繼承而來的實現都較為容易。5、注意  Protected表示繼承時子類可以對基類有完全訪問權。也就是說protected修飾的類成員,對子類公開,段不對其他類公開。實例:
  1  private void button1_Click(object sender,EventArgs e)    2     3         {    4     5             Cat cat = new Cat("咪咪");//將類實例化 Cat  cat聲明一個Cat對象,對象名為cat;newCat()將此cat對象實例化    6     7             cat.ShoutNum = 5;            //給屬性賦值    8     9             MessageBox.Show(cat.Shout());   10    11         }   12    13         class Animal                               //定義父類   14    15         {   16    17             protected string name ="";          //注意變為Protected  子類可以繼承   18    19             public Animal(string name)   20    21             {   22    23                 this.name = name;   24    25     26    27             }   28    29             public Animal()   30    31             {   32    33                 this.name = "無名";   34    35             }   36    37             protected int shoutNum = 3;               //變為protected   38    39             public int ShoutNum   40    41             {   42    43                 get   44    45                 {   46    47                     return shoutNum;   48    49                 }   50    51                 set   52    53                 {   54    55                     shoutNum = value;   56    57                 }   58    59             }   60    61         }   62    63         class Cat : Animal                       //注意變化   64    65         {   66    67             public Cat() : base()                //子類構造方法需要調用父類同樣參數類型的構造方法,用base關鍵字代表父類   68    69             { }   70    71             public Cat(string name):base(name)           //注意變化   72    73             { }   74    75             public string Shout()   76    77             {   78    79                 string result = "";   80    81                 for (int i = 0; i <shoutNum; i++)   82    83                     result += "喵!";   84    85                 return "我的名字叫:" +name + "" + result;   86    87             }   88    89         }   90    91         class Dog : Animal                               //注意變化   92    93         {   94    95             public Dog() : base()   96    97             { }   98    99             public Dog(string name): base(name)  100   101             { }  102   103             public string shout()  104   105             {  106   107                 string result = "";  108   109                 for (int i = 0; i <shoutNum; i++)  110   111                     result += "汪!";  112   113                 return "我的名字叫:" +name + "" + result;  114   115             }  116   117         }  118   119         private void button2_Click(objectsender, EventArgs e)  120   121         {  122   123             Dog dog = new Dog("狗");//將類實例化 Cat  cat聲明一個Cat對象,對象名為cat;newCat()將此cat對象實例化  124   125             dog.ShoutNum = 5;            //給屬性賦值  126   127             MessageBox.Show(dog.shout());  128   129         }  

二、多態

1、定義 多態是指類可以有多種形態,通過修改可以形成多個實現方法。子類從父類繼承時它會獲得父類的所有方法、字段、屬性、事件。多態表示不同的對象可以執行相同的操作,但要通過它們自己的實現代碼來執行。通俗的說:不同的對象對于同一個指令做出的響應不同,就是多態。 若要改變父類的數據和行為,兩種方式:可創建新的成員替換父級成員,或者可以重寫虛擬的父級成員。(1)若要替換父級成員,需要使用new關鍵字。下面是GetName方法的兩種形態,一種是返回父級名稱,一種是返回子級名稱?! ?pre> 1 第一種:返回父級名稱 2 3 class PerentClass //父類 4 5 { 6 7 public string GetName() 8 9 { 10 11 return"父級名稱"; 12 13 } 14 15 } 16 17 第二種:返回子級名稱 18 19 class SonClass:PerentClass //子類繼承父類 20 21 { 22 23 public new string GetName() 24 25 { 26 27 return"子級名稱"; 28 29 } 30 31 } 32

(2)重寫虛擬的父級成員的兩個條件:父級成員使用關鍵字“virtual”;子級成員使用“override”。

 1 class PerentClass    //父類   2    3 {   4    5        public virtual string  GetName()   6    7        {   8    9           return"父級名稱";  10   11         }  12   13 }  14   15    16   17 class SonClass:PerentClass     //子類繼承父類  18   19 {  20   21        public override string GetName()  22   23        {  24   25           return"子級名稱";  26   27         }  28   29 }

(2):抽象方法實現多態

 1  /// <summary> 2     /// 鳥類:基類 3     /// </summary> 4     public abstract class Bird 5     { 6         /// <summary> 7         /// 吃:抽象方法 8         /// </summary> 9         public abstract void Eat();10     }
 1  /// <summary> 2     /// 喜鵲:子類 3     /// </summary> 4     public  class Magpie:Bird 5     { 6         /// <summary> 7         /// 重寫父類中Eat方法 8         /// </summary> 9         public override void Eat()10         {11             Console.WriteLine("我是一只喜鵲,我喜歡吃蟲子~");12         }13     }
 1 /// <summary> 2     /// 老鷹:子類 3     /// </summary> 4     public  class Eagle:Bird 5     { 6         /// <summary> 7         /// 重寫父類中Eat方法 8         /// </summary> 9         public override void Eat()10         {11             Console.WriteLine("我是一只老鷹,我喜歡吃肉~");12         }13     }
 1  /// <summary> 2     /// 企鵝:子類 3     /// </summary> 4     public  class Penguin:Bird 5     { 6         /// <summary> 7         /// 重寫父類中Eat方法 8         /// </summary> 9         public override void Eat()10         {11             Console.WriteLine("我是一只小企鵝,我喜歡吃魚~");12         }13     }
 1   static void Main(string[] args) 2         { 3             //創建一個Bird基類數組,添加 Magpie對象,Eagle對象,Penguin對象 4             Bird[] birds = { 5                            new Magpie(), 6                            new Eagle(), 7                            new Penguin() 8             }; 9             //遍歷一下birds數組10             foreach (Bird bird in birds)11             {12                 bird.Eat();13             }14             Console.ReadKey();15         }

執行結果:

/

2,抽象類可以被繼承嗎?

可以,不僅可以被普通類繼承,也可以被抽象類繼承

3,抽象方法可以有方法體嗎?

不可以,連花括號都不能有

4,簡述抽象方法和虛方法的區別?

 1     //01.定義一個抽象類,用abstract 修飾 2  3     //02.抽象方法不能有方法體,甚至連{}都不能有 4  5     //03.抽象方法只能存在于抽象類中,但是抽象類中可以有非抽象方法 6  7     //04.抽象類不能實例化 8  9     //05.抽象類中抽象方法只是用來規定方法的形式(參數,返回值),約束子類方法的形式10 11     //06.抽象類中的抽象成員必須在子類中全部實現,除非子類也是抽象類12 13     //07.子類實現抽象方法的快捷鍵,Ctrl+.(沒有輸入法情況下 )14 15     //shift+alt+F1016 17 //08.抽象類不能用static修飾:如果是static,抽象就無法被繼承,也就失去了抽象類本身的意義

5、注意子類以父類省份出現子類在工作中以自己的方式來實現子類乙父類的身份出現時,子類特有的屬性和方法不可同時使用使用多態時,需了解:虛方法和方法重寫為了使子類的實例完全接替來自父類的成員,父類必須將該成員聲明為虛擬的。這是通過在該成員的返回類型之前添加virtual來實現。子類選擇使用override關鍵字,將父類實現替換為自己的實現,這就是方法重寫。說了這么多,那么我們用一個具體案例實現一下吧!程序效果圖如下:關鍵代碼如下:
//父類 public abstract class Vehicle//抽象類    {        public string Color { get; set;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 菏泽市| 亳州市| 芒康县| 元氏县| 成武县| 红原县| 天祝| 西丰县| 黑龙江省| 岑巩县| 萍乡市| 五莲县| 鄄城县| 上虞市| 三江| 昌都县| 巴彦淖尔市| 西峡县| 乌兰察布市| 兖州市| 磐石市| 桂平市| 应用必备| 安多县| 南丹县| 兰州市| 吉安市| 咸宁市| 宜州市| 磐安县| 德惠市| 邯郸县| 沅陵县| 翁牛特旗| 恭城| 建瓯市| 茌平县| 新密市| 耒阳市| 嵩明县|