c 物件導向系列1(繼承)

2021-09-06 04:39:51 字數 3522 閱讀 3132

c#允許乙個類繼承其他類的屬性和方法,別繼承的類稱為父類,繼承的類稱為派生類或子類。子類不僅僅可以繼承基類的屬性和方法,還可以根據需要定義新的屬性和方法,增加新的功能,這樣可是使用者重用基類的**,專注於子類的新**,提高類的可重用性,繼承的好處是能共享**,繼承後,父類的所有的字段和方法都將存在於子類中,每乙個子類都具有父類的非私有特性。

c#語言中子類僅能派生於乙個父類。

1.繼承的定義

如果要宣告乙個類派生於另乙個類,可以使用下面的語法

[修飾符]  class  派生類名:基類名

//派生類的成員

其中:修飾符:可選用poublic    internal      absrtract     sealed   new     private    protected等修飾符,根據需要確定。

派生類名:必須是乙個有效的c#識別符號。一般採用pascal大小寫命名規則,單詞的第乙個字母大寫。

基類名:被繼承的類的名。

類體:用於定義派生類的成員。

繼承意味著乙個類隱藏了除了建構函式和析構函式的基類的所有成員。

繼承應該注意的幾點

《1》繼承是可以傳遞的。

《2》派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去基類的成員的定義。

《3》析構函式和建構函式不能參與被繼承,除此之外的其他任何成員都能被繼承。

《4》派生類如果定義了與繼承而來的成員同名的新成員,都將覆蓋以繼承的成員。但這並不是在派生類中刪除了這些成員,而只是不能再訪問這些成員。

《5》類可以定義虛方法、虛屬性以及虛索引指示器,他的派生類都能夠過載這些成員。從而實現類的多型性。

《6》派生類的成員有兩個成員:乙個是從基類中繼承來的,另乙個是在派生類中重新定義的。

案例如下

using  system;

namespace  example1

public  void  printinfo()

",name);

console.writeline("身份證號:",identitycard);

}

}

//定義派生類

public   class  employee:person

public    void  printemployeeinfo()      //雇員資訊列印

",name);

console.writeline("身份證號:",identitycard);

console.writeline("雇員 :",id);

}

}

class  class1

}

}

程式執行結果:

呼叫printemployeeinfo()方法

姓名:linming

身份證號:  370321012950020

呼叫printinfo()方法

姓名:liming

身份證號: 370321012950020

解析程式:

《1》這裡面要注意一點,基類中的tel定義的是私有成員,在我們繼承的時候是可以繼承的,但是我們這裡是不能訪問的。

《2》當我們例項化子類的時候我們就呼叫基類,所以初始化的同時也對基類進行了初始化。

派生類的建構函式

定義派生類的建構函式

[修飾符]   派生類類名(引數列表1):base(引數2)

修飾符:可以是public    pirvate  static

派生類名:建構函式所在的類名

引數列表1:指明引數的名稱和型別,包含派生類新增引數及基類中的引數,也可以無引數。

base:基類關鍵字表示基類,關鍵字base為呼叫基類成員提供了乙個簡便的方法,呼叫基類成員的格式為base.成員名。

當我們例項化時就不需要帶上base這個關鍵字了。

使用new修飾符隱藏基類的成員

使用new修飾符可以顯示隱藏從基類繼承的成員,這樣在使用派生類的物件的方法時,呼叫的是派生類重寫的與派生類的新方法。

例題public   class  mybase

public   int    x;

public  void   myvoke()

console.writeline("this   is    mybase");

在派生中使用myvoke名稱宣告成員會隱藏基類中的myvoke方法,即:

public  class  myderived:mybase

}

這樣我們就隱藏基類的方法了,但我們呼叫基類的方法的時候就採用:base.基類隱藏的方法;

密封類和密封方法

但我們需要把乙個單獨的類分開,來實現莫中特定的功能的時候,而不希望他有所繼承和重寫,我們就需要將這個類密封起來,

命令格式如下:

sealed   class   finalclass

抽象類和抽象函式

c#允許把類和函式宣告為abstract,抽象類不能例項化,而抽象類函式沒有執行**,函式括號後跟乙個分號,必須在非抽象類中重寫,如果類包含抽象函式,該類也是抽象類的,必須宣告為抽象的:

abstract   class   building

物件導向系列一(繼承)

物件導向的三大特性 繼承 封裝 多型性。我們先來說說繼承。繼承,是子類對父類的沿用,父類的除私有 private 部分外,都可以歸子類所繼承。繼承的關係 子類 繼承類 派生類,父類 基類 對父類進行繼承的子類被稱為繼承類。又可描述為父類派生而產生的子類為派生類。被子類繼承的父類被稱為基類 繼承的兩個...

c 物件導向 繼承

三 繼承 1.繼承的型別 實現繼承和介面繼承 2 介面繼承 表示乙個型別只繼承函式的簽名,沒有繼承任何實現 在需要指定該型別具有某些可用的特性時,最好使用這種型別的繼承。2.多重繼承 c 不支援多重繼承,為簡化 的繁瑣,可以允許型別派生自多個介面 多重介面繼承。這說明c 可以派生自另乙個類和任意多個...

C 物件導向 繼承

一 通過繼承 inheritance 可以在建立新類時復用 擴充套件和重寫已在其它類中宣告的可訪問的例項成員 除建構函式和析構函式外 類完全支援繼承,可以繼承自類也可以實現介面,結構不支援繼承,只可以實現介面 繼承是通過派生 derivation 實現的,被繼承的類稱為基類 base class 繼...