程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 繼承的本質的個人學習筆記,繼承本質學習筆記

繼承的本質的個人學習筆記,繼承本質學習筆記

編輯:C#入門知識

繼承的本質的個人學習筆記,繼承本質學習筆記


對繼承的本質的一些理解,看了些文章和博客,總結成自己的文字加深一下理解,可能表達和理解的不是很透徹,請帶著批判的眼光閱讀~
先附上大神們的文章~

http://www.cnblogs.com/pbwf/archive/2008/03/27/1125451.html


new創建對象時,遞歸查找父類,分配內存,最先創建的應該是object。
對象是在運行時創建的,方法是在編譯時創建,對象字段和方法的創建和調用遵循執行就近原則,因此子類會拷貝父類的方法和字段,父類的字段和方法在前,子類的新添加的方法和字段在後,調用按字段和方法存儲的順序調用,如果子類重寫父類的方法,就會覆蓋從父類拷貝的方法,如果用new定義同名方法,就會隱藏父類方法的實現,父類的方法還存在,排在子類同名方法前
調用的方法是子類還是父類的,和引用類型無關,只和創建的對象是子類還是父類對象有關(關注對象原則),同時聲明引用類型的不同只會決定對方法的訪問權限的不同,父類可以聲明創建子類對象,是因為子類會繼承拷貝父類的方法和字段,在子類中父類型的引用具有訪問權限。而子類不可聲明和創建父類對象是因為,父類中子類指針是不具有訪問權限的。
父類型的引用只能調用子類中從父類拷貝的方法和字段,對子類新添加的方法和字段是無法調用的。子類型的引用調用的優先級按父類在前,子類的在後原則,如果子類使用new定義了同名方法,那麼就會隱藏父類的方法,優先調用子類的方法


簡單的助於理解的代碼:
 public class Bird
    {
        private string type = "bird";
        public virtual string ShowType()
        {
            return "bird";
        }
    }

    public class Chicken : Bird
    {
        private new string type = "chicken";
        public string show()
        {
            return "chicken";
        }
        public override  string ShowType()
        {
            return "chicken";
        }
    }
調用代碼如下:
            Bird bird = new Chicken();
            Chicken chicken = new Chicken();
            string str1 = bird.ShowType();
            string str2 = chicken.ShowType();
結果:str1-chicken str2-chicken

改一下子類的方法
 public class Chicken : Bird
    {
        private new string type = "chicken";
        public string show()
        {
            return "chicken";
        }
        public new string ShowType()
        {
            return "chicken";
        }
    }
結果:str1-bird str2-chicken 
雖然創建的都是chicken對象,但是bird是無法調用chicken中的show()方法的,chicken是可以的,這就是引用類型的訪問權限的不同。

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