如何理解C 多型中的override和new

2021-12-29 21:44:39 字數 2166 閱讀 7067

如何理解c#中的override和new,看了很多部落格和文章,從中收穫了不少關於繼承和多型的知識。但是理解層面還不夠深入,不入本質。

但是,物件以及繼承和多型,往往都是和現實世界模擬而成的。它們源於現實世界,而高於之。我們何嘗不從現實世界入手,對其實現機制進行模擬。用我們比較熟悉的方式去理解呢?

見如下**:

[csharp]

01.namespace classlibrary1 

02. 

09.    } 

10.   public class s1 : teacher 

11.     

16.    } 

17.   public class s2 : s1 

18.     

23.    } 

24.   public class s3 : s2 

25.     

30.    } 

31.} 

32. 

33.namespace consoleapplication1 

34. 

60.    } 

61.} 

namespace classlibrary1

}public class s1 : teacher

}public class s2 : s1

}public class s3 : s2

}}namespace consoleapplication1

}}分析:為什麼t=s3,t.*****()顯示結果是s2重寫了s1的試卷呢?因為這個引用t是teacher類的,所以先從teacher類找到*****()這個方法,然後發現被重寫,所以又找到s1的*****(),然後發現其又被重寫,所以,繼續往下走,找到了s2的*****()。到此處,發現*****()沒有被重新,所以停止。所以使用override會找到被重寫的最遠的乙個方法。通俗講:老師出了出卷,同學a做了,然後同學b在a的基礎上又做了修改...同學n在n-1的基礎上又做了修改。所以最後的試卷肯定是第n個童鞋的結果哦。但是new方法只是重新又寫了自己的試卷而已。只有通過s3 s3=new s3(),s3.*****().才能看到自己做的結果。即通過自己的引用處理自己的物件。如何理解c#中的override和new,看了很多部落格和文章,從中收穫了不少關於繼承和多型的知識。但是理解層面還不夠深入,不入本質。

但是,物件以及繼承和多型,往往都是和現實世界模擬而成的。它們源於現實世界,而高於之。我們何嘗不從現實世界入手,對其實現機制進行模擬。用我們比較熟悉的方式去理解呢?

見如下**:

[csharp] 

01.namespace classlibrary1 

02. 

09.    } 

10.   public class s1 : teacher 

11.     

16.    } 

17.   public class s2 : s1 

18.     

23.    } 

24.   public class s3 : s2 

25.     

30.    } 

31.} 

32. 

33.namespace consoleapplication1 

34. 

60.    } 

61.} 

namespace classlibrary1

}public class s1 : teacher

}public class s2 : s1

}public class s3 : s2

}}namespace consoleapplication1

}}分析:為什麼t=s3,t.*****()顯示結果是s2重寫了s1的試卷呢?因為這個引用t是teacher類的,所以先從teacher類找到*****()這個方法,然後發現被重寫,所以又找到s1的*****(),然後發現其又被重寫,所以,繼續往下走,找到了s2的*****()。到此處,發現*****()沒有被重新,所以停止。所以使用override會找到被重寫的最遠的乙個方法。通俗講:老師出了出卷,同學a做了,然後同學b在a的基礎上又做了修改...同學n在n-1的基礎上又做了修改。所以最後的試卷肯定是第n個童鞋的結果哦。但是new方法只是重新又寫了自己的試卷而已。只有通過s3 s3=new s3(),s3.*****().才能看到自己做的結果。即通過自己的引用處理自己的物件。

C 中多型理解

封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...

如何理解Java中的多型

可以體現多型的前提有三個 首先兩個類之間要有繼承關係 子類需要重寫父類方法 父類引用指向子類物件 class duotai class animal public static void sleep public void run class catextends animal public sta...

關於C 中多型的理解

假如我們用類a生成乙個物件a,那麼由於物件a中只包含類a中的成員變數 當然不包含靜態變數 及乙個指向虛函式表的指標。還有,乙個指標只可以提供兩樣資訊 位址資訊及指標的型別。還有重要的一條 基類的指標可以指向派生類的物件,而派生類的指標是不允許指向基類物件的。這樣,如果我們有乙個指向物件a的指標,由指...