C 繼承相關

2021-07-23 14:45:13 字數 2678 閱讀 3590

**:

c#中abstract 、virtual和override的使用

1. abstract 修飾符指示所修飾的內容缺少實現或未完全實現。abstract 

修飾符可用於類、方法、屬性、索引器和事件。

在類宣告中使用

abstract

修飾符以指示某個類只能是其他類的基類。

標記為抽象或包含在抽象類中的成員必須通過從抽象類派生的類來實現。

(1)抽象類具有以下特性:

1) 抽象類不能例項化。

2) 抽象類可以包含抽象方法和抽象訪問器。

3) 不能用sealed 修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。採用sealed 修飾符的類無法繼承,而abstract 修飾符要求對類進行繼承。

4) 從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。

5) 在方法或屬性宣告中使用abstract 修飾符以指示方法或屬性不包含實現。

(2)抽象方法具有以下特性:

1) 抽象方法是隱式的虛方法。

2) 只允許在抽象類中使用抽象方法宣告。

3) 因為抽象方法宣告不提供實際的實現,所以沒有方法體;方法宣告只是以乙個分號結束,並且在簽名後沒有大括號()。

(3)在抽象方法宣告中使用

static 

或virtual

修飾符是錯誤的。

除了在宣告和呼叫語法上不同外,抽象屬性的行為與抽象方法一樣。

在靜態屬性上使用

abstract

修飾符是錯誤的。在派生類中,通過包括使用

override

修飾符的屬性宣告,可以重寫抽象的繼承屬性。

public abstract class parent

public abstract int y

}public class newperson : parent

public override int x

}public override int y}}

static void main(string args)

2.virtual

關鍵字用於修飾方法、屬性、索引器或事件宣告,並使它們可以在派生類中被重寫。虛擬成員的實現可由派生類中的

重寫成員

更改。呼叫虛方法時,將為重寫成員檢查該物件的執行時型別。將呼叫大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。預設情況下,方法是非虛擬的。不能重寫非虛方法。

virtual 

修飾符不能與

static

、abstract, private 

或override 

修飾符一起使用。和抽象方法的相同點是都用了

override

關鍵字進行重寫方法,不同點是抽象方法必須存在於抽象類中,而子類必須重寫,除非子類也是抽象的。

public class dimensions

public dimensions(double x, double y)

public virtual double area()

}public class circle : dimensions

public override double area()

}public class sphere : dimensions

public override double area()

}public class cylinder : dimensions

public override double area()

}static void main(string args)

3.override 方法提供從基類繼承的成員的新實現。由override 宣告重寫的方法稱為重寫基方法。重寫的基方法必須與override 方法具有相同的簽名。不能重寫非虛方法或靜態方法。重寫的基方法必須是virtual、abstract 或override 的。override 宣告不能更改virtual 方法的可訪問性。override 方法和virtual 方法必須具有相同的

訪問級別修飾符

。重寫屬性宣告必須指定與繼承屬性完全相同的訪問修飾符、型別和名稱,並且被重寫的屬性必須是virtual、abstract 或override 的。

4.base和this的區別

1)base作用:用於從派生類中訪問基類的成員,呼叫基類上已被其他方法重寫的方法。指定建立派生類例項時應呼叫的基類建構函式。

注:從靜態方法中使用base 關鍵字是錯誤的。

2)區別:

base 是子類中引用父類,用於在派生類中訪問重寫的基類成員。

this 是當前類,引用自己,用於訪問本類的成員,當然也包括繼承而來公有和保護成員。

3)注意:

a).在靜態成員中使用base和this都是不允許的。原因是,base和this訪問的都是類的例項,也就是物件,而靜態成員只能由類來訪問,不能由物件來訪問。

b).base是為了實現多型而設計的。

c).使用this或base關鍵字只能指定乙個建構函式,也就是說不可同時將this和base作用在乙個建構函式上。

d).除了base,訪問基類成員的另外一種方式是:顯示的型別轉換來實現。只是該方法不能為靜態方法。

C 繼承相關知識

在物件導向的程式設計中,有兩種截然不同繼承型別 實現繼承和介面繼承 1.實現繼承和介面繼承 實現繼承 表示乙個型別派生於基型別,它擁有該基型別的所有成員欄位和函式。在實現繼承中,派生型別採用基型別的每個函式的實現 除非在派生型別的定義中指定某個函式的實現 在需要給現有的型別新增功能,或許多相關的型別...

C 多重繼承相關問題

分類 c 2012 02 10 18 03 2758人閱讀收藏 舉報c 編譯器symbian class caccess 多重繼承的問題,首先想到多繼承建構函式如何處理?symbian下是可以乙個c類多個m類多重繼承的 c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多...

C 繼承相關知識點

c 作為物件導向的語言,類之間可以繼承,被繼承的類稱為基類 父類 產生的新類稱為派生類 子類 c 的類許可權分為三個等級,private 私有的 protect 被保護的 public 公有的 其相對應的繼承的許可權也分為相同的三個等級,即private,protect以及public繼承。這三類繼...