1.隱藏繼承的成員new / 虛方法(override)/ abstract / 多態 ----- 重寫

總結:ide

1. 在繼承上, new/override沒區別spa

2. 在多態上,new不支持多態,override支持3d

 

在C#中改變類中相同名稱的方法的實現過程當中有三種方式:重載、重寫和覆蓋。 code

重載指具備相同的方法名,經過改變參數的個數或者參數類型實現同名方法的不一樣實現。blog

重寫:則是隻在繼承中,子類經過override關鍵字修飾方法,實現父類和子類相同方法的不一樣實現,注意,父類方法必須是用virtual或者abstract關鍵字修飾的虛方法或者抽象方法繼承

覆蓋:則是指在繼承中,子類經過在與父類相同方法名以前用new修飾的一個新的方法的定義string

 

1.new ---- 子類隱藏父類的方法,覆蓋(總結:new關鍵字不支持多態
it

下面的例子咱們能夠發現new 關鍵字,並不支持多態的應用io

咱們使用多態調用的任然仍是父類中的方法,也就是被隱藏的方法class

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Father fa = new Son(); fa.print(); } } class Father { public  void print() { Console.WriteLine("我是父類"); } } class Son : Father { public new void print() { Console.WriteLine("我是子類"); } } }

 輸出:

 

若是咱們使用了多態建立了實例,要調用子類重寫的方法,須要強制轉換成子類類型,實例以下:

class Program { static void Main(string[] args) { Father fa = new Son(); Son so = (Son)fa; so.print(); } }

 

輸出:

 

 

2.virtual-- 重寫 abstract--實現 (總結:這兩種都支持多態)

a.重寫父類的方法要用到override關鍵字(具備override關鍵字修飾的方法是對父類中同名方法的新實現)
b.要重寫父類的方法,前提是父類中該要被重寫的方法必須聲明爲virtual或者是abstract類型。(virtual修飾的能夠有方法體,子類不必定要重寫 abstract沒有方法體,子類必需要實現)
C.virtual關鍵字用於將方法定義爲支持多態,有virtual關鍵字修飾的方法稱爲「虛擬方法」

實例以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Father fa = new Son(); fa.print(); } } class Father { public virtual void print() { Console.WriteLine("我是父類"); } } class Son : Father { public override void print() { Console.WriteLine("我是子類"); } } }
輸出:
相關文章
相關標籤/搜索