最近又再看基礎知識了。
看到方法的重寫(new)和覆蓋(override)的時候有點不太懂。
於是百度之。
那答案啊。。。。。
要么就是把覆蓋(override)和重載(overload)混淆了。
要么就是把重寫(new)和覆蓋(override)說反了。
最后不得已谷歌之。
在stackoverflow里看到一個比較好的答案:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
virtual: indicates that a function may be overriden by an inheritor
override: overrides the functionality of a virtual function in a base class, providing different functionality.
new: hides the original function (which doesn't have to be virtual), providing different functionality. This should only be used where it is absolutely necessary.
When you hide a method, you can still access the original method by up casting to the base class. This is useful in some scenarios, but dangerous.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
翻譯過來就是(翻譯不對的地方請指正,tks):
override(覆蓋):
virtual:表示這個方法也許會被繼承者(子方法)覆蓋(override)
override:覆蓋基類中的虛方法,提供不同的實現方法
new(重寫) :
隱藏原始方法(不必是虛方法),提供不同的實現方法。這個(重寫)應該僅用於必須要用的地方(也就是一般地方不推薦使用)。
當你隱藏一個方法,你仍然可以訪問原始方法通過指向基類。這在一些場景中很有用,但是比較危險。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
所以呢,
override一般是拓展原始虛方法,原始方法必須要加上virtual修飾符。
new 一般是用來拓展原始非虛方法,但是不推薦使用。
個人理解,如有不正,不吝賜教!
