C#override與new修飾隱藏的區別(轉載)

來源:互聯網
上載者:User

標籤:

C#比java多一個new隱藏的功能。C# override重寫相當於java中沒有關鍵字的方法重寫。所以java中方法是沒有隱藏功能的。

C# override重寫,是指對父類中的虛方法(標記virtual)或抽象方法(標記為abstract)進行重寫,實現新的功能,它必須與父類方法的簽名完全一致,而且與父類方法的可訪問性也必須一致 new隱藏,是指在子類中重新定義一個簽名與父類的方法相同的方法,這個方法可以不用new修飾,只是編譯時間會彈出一個警告資訊:如果是有意隱藏,請使用關鍵字new。

 1 using System;      2 public class Test       3 {      4     public static void Main(String[] args){      5         A a=new B();       6         Console.Write(a.getVal()); // 輸出:A 雖然執行個體是B,但是執行的卻是A的方法      7      8         a=new C();       9         Console.Write(a.getVal()); // 輸出:C 執行個體是C,而且C重寫的A的方法,所以執行C的方法     10     11         B b=new B();      12         Console.Write(b.getVal()); // 輸出:B 只有定義和執行個體都是B,才執行B的方法     13     }      14 }     15 class A     16 {     17     // 要允許子類重寫,方法必須標識為virtual 或 abstract     18     public virtual String getVal(){      19         return "A";      20     }      21 }      22 class B : A     23 {     24     // 隱藏父類方法 用new標識,不標識時會出現編譯警告,不影響使用     25     public new String getVal(){      26         return "B";      27     }      28 }      29 class C : A     30 {     31     // 重寫方法 必須用override標識     32     public override String getVal(){      33         return "C";      34     }      35 }    

而在Java中,不存在隱藏父類方法這一概念,Java只有重寫方法這一概念,同樣的代碼,在Java中執行和C#中執行截然不同:

 1 class test      2 {      3     public static void main(String[] args)      4     {      5         A a=new B();       6 // 輸出:B  執行個體是B,執行的也是B的方法(在C#中,此時應該輸出A)      7         System.out.println(a.getVal());       8          a=new A();       9 // 輸出:A 只有定義和執行個體都是A,才執行A的方法     10         System.out.println(a.getVal());      11     }     12 }     13 class A     14 {     15     public String getVal(){      16         return "A";      17     }      18 }      19 class B extends A     20 {     21     public String getVal(){      22         return "B";      23     }      24 }  

PS:轉載自51CTO 僅供本人學習使用

C#override與new修飾隱藏的區別(轉載)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.