C 繼承和多型

2021-07-05 18:25:20 字數 2235 閱讀 5120

在c#的物件導向的大家庭裡,我感覺繼承算是很重要的了,因為有很多的東西都是依賴於繼承和多型的,所以單獨的在第三篇部落格裡做總結和昇華。

繼承在面相物件的地方是乙個很是重要的東西,可以說在物件導向的世界裡沒有了繼承就沒有了這麼多的東西,而沒有了多型就沒有了多彩的世界。

類的繼承是最為普遍的事情了,可是類又有很多態別可分,比如抽象類,用new宣告的類等等,他們的基本繼承方法是一樣的,都是用的「:」來繼承的,只不過是父類中的方法重寫規則是不一樣的,下面來分情況概述:

c#中子類重寫父類方法的幾種情況,關鍵字:virtual、abstract、override、new

1)、virtual:標識可能但不是必須被子類重寫的方法,父類必須給出缺省實現,子類可以重寫(使用override,new,或無特殊標識的普通方法),也可以不重寫該方法。

2)、abstract:標識必須被子類重寫的方法,父類不給出實現,子類必須用override關鍵字重寫該方法。

3)、override:標識重寫父類的方法,父類方法必須是用abstract,virtual,override之一宣告,執行時將根據例項的型別而不是引用的型別呼叫物件的方法。

4)、new:標識重寫父類的方法,父類方法可以用virtual、override、new之一宣告,也可以是沒有特殊標識的普通方法,執行時會根據引 用的型別選擇呼叫父類還是子類的方法,重寫父類方法時,使用new關鍵字與使用沒有特殊標識的普通方法是等效的,但是後者會給出乙個編譯警告。

綜上,在非抽象類和隱藏繼承的new下的類的重寫都要用virtual來宣告方法。繼承舉例:

class basic

}class derived :basic //繼承basic

}

(2)、介面的繼承

和類的繼承一樣,介面也可以繼承。介面可以從乙個或者多個介面中繼承,而類只能從乙個類中繼承,如果從多個介面中繼承,用「:」跟被繼承介面名,被繼承介面名之間用「,」隔開,如:

inte***ce  a

inte***ce b:a //b繼承於a

inte***ce c:a //c繼承於a

inte***ce d:b,c //d繼承於b,c

介面d繼承了a,b,c的三個介面的特性,可見介面的繼承具有傳遞性。

多型是由繼承來實現的,所以他體現了繼承的性質,但是和繼承略有不同,多型是同一操作作用於不同物件可以有不同的解釋,產生不同的結果,在繼承方面多型通過以自類複寫父類中的虛函式型的方法來實現的。多型又分成兩種,一種是編譯時的多型,一種是執行是的多型。

(1)過載和複寫的區別

1)、過載是指類中定義方法的不同版本,舉例:

public  int  calculate (int x  ,int  y)

public  double  calculate (double  x, double  y)

在使用中可以視不同的情況而決定用哪個方法。

兩相同(名稱,返回值(可以不同)),引數必須不同

public class test                      //不同的方法

public double calculate (double x,double y)

}

2)、複寫是子類為了滿足自己的需求來對方法的重寫

要求:通過override來進行重寫,只有虛方法和抽象物件才能重寫,三相同(名稱,引數,返回值)

demo:

public  class shape()

public shape(double x,double y)

public virtual double getarea()

}public class circle:shape

public override double getarea() //重寫方法

}public class plotest

",c.getarea); //呼叫多型的方法

}}

關於繼承和多型就先總結這麼多,其中的例子都是很好的例子,在此不做過多的陳述了。繼承和多型總是要在一起用的,其中還包括了介面的實現,又有隱式方法的實現和隱式介面的實現,東西很多,重在理解和使用。

C 繼承和多型

剛學習了c 繼承和多型,對virtual override seal override new有點了解,在此寫下這篇文章以供以後參考,若有錯誤或不足,還望各位指出。這裡有3個類,分別是grandfather father son。好,我們現在來分析一下grandfather的遺產怎麼讓father繼...

C 繼承和多型

繼承是使 復用的一種機制。本質 單繼承 乙個派生類乙個基類派生。多繼承 乙個派生類有兩個人或者多個基類。如 馬與驢雜交所生的騾子就有兩個基類,騾子既繼承了馬的一些特徵,也繼承了驢的一些特徵 構造派生類包括 1 從基類接收成員 派生類接收基類的全部成員,沒有選擇 2 調整從基類接收的成員 可以改變基類...

c 繼承和多型

01 什麼是繼承?舉例說明 public class em public int age public class eb em public int yearof 02 什麼是多型?舉例說明 public virtual string sauhi public override string say...