(轉)抽象類、抽象屬性、抽象方法


抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。

下面我們以水果為例,首先定義抽象類Fruit,抽象類中有公共屬性vendor,抽象屬性Price和抽象方法GrowInArea,

1     public abstract class Fruit
2     {
3         public string  vendor { get; set; } //默認為private
4         
5         public abstract float Price { get; } //抽象屬性必須是公有的
6 
7         public abstract void GrowInArea(); //抽象方法必須是公有的
8     }

下面定義一個Apple類,繼承抽象類

 1     public class Apple : Fruit
 2     {
 3         public override float Price
 4         {
 5             get
 6             {
 7                 if (vendor == "紅富士")
 8                     return 100;
 9                 else
10                     return 0;
12             }
13         }
14 
15         public override void GrowInArea()
16         {
17             Console.WriteLine("我在南方北方都能生長,我的生產商是:" + vendor + ",我現在的價格是:" + Price);
18         }
19     }

子類繼承抽象類,需要override抽象類中的抽象屬性和抽象方法,如果有未override的,則子類也必須為抽象類

再定義個Orange類

 1     public class Orange : Fruit
 2     {
 4         public override float Price
 5         {
 6             get
 7             {
 8                 return 0;
 9             }
10         }
11 
12         public override void GrowInArea()
13         {
14             Console.WriteLine("我只能生長在南方,我的生產商是:" + vendor + ",我的價格是:" + Price);
15         }
16     }

在main函數中輸入

 1      static void Main(string[] args)
 2      {
 3          Fruit f = new Apple();
 4          f.vendor = "紅富士";
 5          f.GrowInArea();
 6 
 7          f = new Orange();
 8          f.vendor = "柑橘";
 9          f.GrowInArea();
10 
11          Console.ReadKey();
13      }

輸出結果如下:

 

總結:

1、抽象類中的抽象屬性和抽象方法必須是公有的,因此必須有public修飾符
2、子類必須override抽象類中的所有抽象屬性和抽象方法,如果沒有全部override,那么子類必須是抽象類
3、抽象類中可以有非抽象屬性和非抽象方法,也可以是私有或者公有,但是如果是私有的話子類就不能訪問,無意義,所以一般情況下都設置為公有
4、有抽象方法或抽象屬性的類一定是抽象類,抽象類中的屬性或方法不一定都是抽象的

文章轉載自:https://www.cnblogs.com/adawoo/p/6434009.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM