您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)C# 中override重寫與new隱藏的區(qū)別是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
C#比java多一個new隱藏的功能。C# override重寫相當(dāng)于java中沒有關(guān)鍵字的方法重寫。所以java中方法是沒有隱藏功能的。
C# override重寫,是指對父類中的虛方法(標(biāo)記virtual)或抽象方法(標(biāo)記為abstract)進(jìn)行重寫,實(shí)現(xiàn)新的功能,它必須與父類方法的簽名完全一致,而且與父類方法的可訪問性也必須一致 new隱藏,是指在子類中重新定義一個簽名與父類的方法相同的方法,這個方法可以不用new修飾,只是編譯時會彈出一個警告信息:如果是有意隱藏,請使用關(guān)鍵字new。
using System; public class Test { public static void Main(String[] args){ A a=new B(); Console.Write(a.getVal()); // 輸出:A 雖然實(shí)例是B,但是執(zhí)行的卻是A的方法 a=new C(); Console.Write(a.getVal()); // 輸出:C 實(shí)例是C,而且C重寫的A的方法,所以執(zhí)行C的方法 B b=new B(); Console.Write(b.getVal()); // 輸出:B 只有定義和實(shí)例都是B,才執(zhí)行B的方法 } } class A { // 要允許子類重寫,方法必須標(biāo)識為virtual 或 abstract public virtual String getVal(){ return "A"; } } class B : A { // 隱藏父類方法 用new標(biāo)識,不標(biāo)識時會出現(xiàn)編譯警告,不影響使用 public new String getVal(){ return "B"; } } class C : A { // 重寫方法 必須用override標(biāo)識 public override String getVal(){ return "C"; } }
而在Java中,不存在隱藏父類方法這一概念,Java只有重寫方法這一概念,同樣的代碼,在Java中執(zhí)行和C#中執(zhí)行截然不同:
class test { public static void main(String[] args) { A a=new B(); // 輸出:B 實(shí)例是B,執(zhí)行的也是B的方法(在C#中,此時應(yīng)該輸出A) System.out.println(a.getVal()); a=new A(); // 輸出:A 只有定義和實(shí)例都是A,才執(zhí)行A的方法 System.out.println(a.getVal()); } } class A { public String getVal(){ return "A"; } } class B extends A { public String getVal(){ return "B"; } }
上述就是小編為大家分享的C# 中override重寫與new隱藏的區(qū)別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。