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


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

剛開始聽老師講,字段要用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),防止外部人員通過子類來改寫父類中的成員,造成嚴重后果。


免責聲明!

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



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