虛方法,抽象類,多型性

2022-03-08 15:32:37 字數 2514 閱讀 2914

code

1. 虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如:

//抽象方法

public

abstract

class

animal

//虛方法

public

class

animal

public

virtual

void

eat(){}}2

. 抽象方法只能在抽象類中宣告,虛方法不是。其實如果類包含抽象方法,那麼該類也是抽象的,也必須宣告為抽象的。如: 

public

class

animal

編譯器會報錯:

main.cs(

10): 

'vstest.animal.sleep()'is

abstract

but it 

iscontained 

innonabstract 

class

'vstest.animal

'main.cs(

11): 

'vstest.animal.eat()'is

abstract

but it 

iscontained 

innonabstract 

class

'vstest.animal'3

. 抽象方法必須在派生類中重寫,這一點跟介面類似,虛方法不必。如果乙個類派生自抽象類但沒有完全實現所有抽象方法,那麼這個類本身也必須宣告為抽

象的.另外抽象類不能例項化,但可以定義抽象類的引用,這種引用能夠指向派生自該抽象類的非抽象子類的例項,呼叫這些虛擬和抽象方法時將自動按照多型性

執行.抽象方法不能具有私有可見性,否則派生類將無法實現它.抽象類可以有建構函式,字段,屬性如:

public

abstract

class

animal

public

class

cat : animal

//we need implement animal.eat() here

}編譯器會報錯:main.cs(

14): 

'vstest.cat

'does not implement inherited 

abstract

member 

'vstest.animal.eat()

',因為我們沒有實現抽象類中所有抽

象方法。

多型性例項:

using

system;

using

system.collections.generic;

using

system.text;

namespace

public

class

employee

public

virtual

void

display()

", m_name );}}

class

secretary : employee

public

override

void

display()

}class

technician : employee

public

override

void

display()

}class

manager : employee

public

newvoid

display()

//遮蔽多型性

}class

static

void

main(

string

args)

console.writeline(

"---------遮蔽多型性------------");

employee array1 

=new

employee[4];

array1[0] 

=new

manager(

"carl");

//呼叫的是基類的display方法

array1[1] 

=new

secretary(

"hubcarl");

array1[2] 

=new

secretary(

"anan");

array1[3] 

=new

employee(

"employee");

foreach

(employee employee 

inarray1)

//((manager)array[0]).display();}}

}執行結果:

C 多型性 (多型性)虛方法 抽象類

多型性 虛方法 1 在父類的方法中加入virtual,這個方法可以被子類重新寫一遍。在子類的方法前加入override 多型就是指不同的物件收到相同的訊息,會產生不同的行為,同乙個類在不同的場合下表現出不同的行為特徵 多型的作用 把不同的子類都看作是父類,可以遮蔽到不同子類物件之間的差異,寫出通用的...

多型性 虛函式 抽象類

一 多型性 指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c 支援兩種多型性 編譯時多型性,執行時多型性。1.編譯時多型性 通過過載函式實現 2.執行時多型性 通過虛函式實現。二 虛函式 虛函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式。可實現成員函式的動態...

多型性(純虛函式與抽象類)

將乙個虛函式初始化為0之後,該函式就變成了純虛函式。如 viurtual double area 0 這個虛函式是無任何的功能,不能直接來呼叫,因為它是抽象的,只有被子類繼承並賦予功能後才可呼叫。乙個類可以有多個純虛函式,但是只要有乙個純虛函式給類就是抽象類。抽象類只是乙個概念,就如同人類一樣,沒有...