1. 程式人生 > >子類對父類中的屬性和字段的改寫

子類對父類中的屬性和字段的改寫

override class string tel 保護 static 解釋 oid 父類

子類對父類中的屬性和字段的改寫

剛開始聽老師講,字段要用private來修飾,屬性用public來修飾,通過屬性來控制字段,字段存儲數據。

那為什麽要用private來修飾字段呢???

原因:防止外部人員通過子類來改寫父類中的屬性以及字段,從而破壞了項目的初衷,造成嚴重的後果。

例子:

父類及成員:

class Bea
    {
        public Bea(int age,string name)
        {
            this.Name = name;
            this.Age = age;
        }
        
public int _age; //對年齡屬性的改寫 public virtual int Age { get { return _age; } set { if (value >= 15 && value <= 20) { _age = value; } else
{ _age = 0
; } } } public string _name; public string Name { get { return _name; } set { _name = value; } } }

子類及成員:

 1 class
Green:Bea 2 { 3 public Green(string a,int b):base(b,a) 4 { 5 } 6 //對父類中的Age屬性的改寫 7 public override int Age 8 { 9 get { return _age; } 10 set 11 { 12 if (value >= 18 && value <= 400) 13 { 14 _age = value; 15 } 16 else 17 { 18 _age = 0; 19 } 20 } 21 } 22 }

接下來在main方法中輸出父類中的成員Age

1 class Program
2     {
3         static void Main(string[] args)
4         {            
5             Bea father = new Green("danger",300);//將子類對象賦值給父類
6             Console.WriteLine(father.Age);
7             Console.ReadKey();
8         }
9     }

結果:300

原因: 實例father對象的時候,首先會調用父類的構造函數,當給父類中的屬性Age賦值時,由於子類對父類中該屬性重寫,因此程序會跳過給父類中的屬性Age賦值

,轉而直接跳到子類中對屬性的改寫裏面,這就解釋了,結果是300而不是0.

結論:在正常的項目中,我們會對字段做保護處理(private),防止外部人員通過子類來改寫父類中的成員,造成嚴重後果。

子類對父類中的屬性和字段的改寫