對C 抽象類的理解

2021-05-11 13:48:47 字數 4365 閱讀 2370

一、解釋1

c#中使用關鍵字 abstract 來定義抽象類和抽象方法。

不能初始化的類被叫做抽象類,它們只提供部分實現,但是另乙個類可以繼承它並且能建立它們

的例項。「乙個包含乙個或多個純虛函式的類叫抽象類,抽象類不能被例項化,進一步

乙個抽象類只能通過介面和作為其它類的基類使用.」

抽象類能夠被用於類,方法,屬性,索引器和事件,使用abstract 在乙個類宣告中表示該類傾向要作為其它類的基類

成員被標示成abstract,或被包含進乙個抽象類,必須被其派生類實現。

abstract class shapesclass

class square : shapesclass

}一、解釋1

在c#中使用關鍵字 abstract 來定義抽象類和抽象方法。

不能初始化的類被叫做抽象類,它們只提供部分實現,但是另乙個類可以繼承它並且能建立它們

的例項。

"乙個包含乙個或多個純虛函式的類叫抽象類,抽象類不能被例項化,進一步

乙個抽象類只能通過介面和作為其它類的基類使用."- c++ programming language by stroustrup chapter13.2

抽象類能夠被用於類,方法,屬性,索引器和事件,使用abstract 在乙個類宣告中表示該類傾向要作為其它類的基類

成員被標示成abstract,或被包含進乙個抽象類,必須被其派生類實現。

abstract class shapesclass

class square : shapesclass

}例如,乙個包含非抽象方法的抽象類:

abstract class myabs

}class myclass : myabs

class myclient

}乙個抽象類可以包含抽象和非抽象方法,當乙個類繼承於抽象類,那麼這個派生類必須實現所有的

的基類抽象方法。

乙個抽象方法是乙個沒有方法體的方法。

abstract class myabs

public abstract void abmethod(); // an abstract method

}class myclass : myabs//must implement base class abstract methods

}class myclient

}但是通過宣告派生類也為抽象,我們可以避免所有或特定的虛方法的實現,

這就是抽象類的部分實現。

abstract class myabs

//not necessary to implement all abstract methods

//partial implementation is possible

abstract class myclass1 : myabs

}class myclass : myclass1

}class myclient

}在c#中,乙個抽象類能夠繼承另乙個非抽象類,另外,繼承了基類的方法,新增新的

抽象和非抽象方法是可行的。

class myclass1 // non-abstract class

}abstract class myabs : myclass1 // inherits from an non-abstract class

class myclass : myabs//must implement base class abstract methods

}class myclient

}乙個抽象類也能從乙個介面來實現,這種情況,我們必須為所有的方法提供方法體,這些方法是來自介面

inte***ce iinte***ce

abstract class myabs : iinte***ce

}class myclass : myabs//must implement base class abstract method

class myclient

}我們不能把關鍵字abstract 和 sealed 一起用在c#中,因為乙個密封類不能夠被抽象。

abstract class myabs

class myclass1 : myabs

public override void abmethod2()

}class myclient

}抽象方法有以下特徵:

1.乙個抽象方法可以看作是乙個虛函式。

2.抽象方法的宣告只能在抽象類中。

3.因為抽象方法宣告只提供乙個無實現的方式,沒有方法體

4.方法體的實現被覆寫方法提供,覆寫方法是乙個非抽象類的成員。

5.抽象屬性的行為和抽象方法相像,除了不同的宣告形式。

6.在乙個靜態屬性中使用abstract 是乙個錯誤。

*乙個抽象屬性能夠通過派生類使用 override 實現.

對於抽象類:

乙個抽象類必須為所有的介面成員提供實現

乙個用於實現介面的抽象類可能把介面方法安排到抽象方法上。例如

inte***ce i

abstract class c: i

抽象類具有以下特徵:

1.抽象類不能被例項化。

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

3.不能把抽象類用密封(sealed)來修飾,那就意味著類不能被繼承,這違反抽象類被繼承的原則。

4.乙個派生於乙個抽象類的非抽象類必須包括所有的繼承來的抽象方法和訪問器的實現

5.在方法和屬性中使用abstract 關鍵字意味著包含它們的實現。

二、解釋2

//抽象方法:只包含方法定義,但沒有具體實現的方法,需要其子類或者子類的子類來具體實現。

//靜態方法不能標記為 override、virtual 或 abstract,即靜態方法都必須是具體的

/抽象類:含有乙個或多個抽象方法的類稱為抽象類,在宣告時,類名前須新增"abstract"關鍵字

//抽象類中可以包含非抽象方法

//抽象類不能夠被例項化,這是因為它包含了沒有具體實現的方法,即可例項化的類一定不是抽象類,不包含未具體實現的抽象方法。

//子類繼承抽象父類後,可以使用override關鍵字覆蓋父類中的抽象方法,並做具體的實現。也可以不實現抽象方法,留給後代實現,這時子類仍舊是乙個抽象類,必須宣告為abstract

//繼承的抽象方法不可以被隱藏

//隱藏:在子類中建立與父類中的方法具有相同簽名(相同的方法名,相同的引數列表--引數型別和次序)的方法(可以帶有"virtual"或"override"關鍵字)即可實現,但建議使用"new"關鍵字,以明確地隱藏。

//只能使用"override"關鍵字來覆蓋(override)父類中標記為"virtual"、"abstract"或"override"的方法,而子類中標記為override的方法,也必須是父類中標記為"virtual"、"abstract"或"override"的方法。

//覆蓋(override):必須使用override關鍵字,可以被覆蓋的方法包括標記為abstract,virtual,和override的方法;

//隱藏:使用new關鍵字,也可不使用關鍵字,可以被隱藏的方法包括一般方法,和標記為virtual"或"override"的方法;

//過載(overload):不需要任何特殊的關鍵字

//靜態方法可以被隱藏或過載

三、解釋3
1、宣告乙個抽象方法使用abstract關鍵字。

2、乙個類中可以包含乙個或多個抽象方法。

3、抽象類中可以存在非抽象的方法。

4、抽象類不能被直接被例項化。

5、實現抽象類用「:」(冒號),實現抽象方法用override關鍵字。

6、抽象類可以被抽象類所繼承,結果仍是抽象類。

7、抽象方法被實現後,不能更改修飾符。

using system;

namespace abstract_for

}///

/// 抽象類abc的派生類derv

///

class derv:abc

}public class test

}抽象類 用abstract 形容的

抽象類不能被例項化,只能被繼承

舉例說明

//抽象類

abstract class 畫圖類

}//繼承類

class 畫三角類 :畫圖類

//繼承類

class 畫圓類 :畫圖類

}ok !

畫圖類 paint1 = new 畫三角類() ;

paint1.畫圖();//畫三角

畫圖類 paint2 = new 畫圓類() ;

paint2.畫圖();//畫圓

C 抽象類的理解

using system using system.collections.generic using system.linq using system.text using system.threading.tasks 抽象類存在的意義 c 中,抽象類是為繼承而生,為了父類更好的進行繼承與多型處理...

C 中抽象類的理解

在c 中抽象類和抽象方法都用abstract修飾。抽象類可以包含抽象方法和普通方法。1.抽象類不能例項化。2.如果乙個類中有抽象方法,那麼該類也必須定義為抽象類。3.一般在抽象類中宣告方法,在子類中構造方法 例項化 using system using system.collections.gene...

對抽象類和介面的理解

abstract class inte ce 1.定義方式 abstract class demo abstract void method1 abstract void method2 可以有抽象和非抽象的方法 inte ce demo 不可以有具體的方法 2.使用上 所以根據他們的特性,abst...