11.5 抽象类及抽象方法

❑抽象类及抽象方法仅可以被继承,不能被实例化;

❑抽象方法不能包含方法体,并且抽象方法所在的类必须也声明为抽象类;

❑要声明抽象类及抽象方法,可以使用关键字abstract,关键字abstract置于关键字class的前面。

如代码清单11-10所示:

代码清单11-10 抽象类及抽象方法


abstract class Person

{

public abstract void Speak();

}


❑抽象方法没有实现,所以方法定义后面紧跟分号,而不是方法体;

❑抽象类的派生类必须实现所有的抽象方法;

❑当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。如代码清单11-11和图11-8所示:

代码清单11-11 覆写方法示例


1 using System;

2

3 namespace ProgrammingCSharp4

4{

5 class PolymorphismSample

6{

7 static void Main()

8{

9 Person p=new Pekingese();

10 Welcome(p);

11}

12

13 static void Welcome(Person person)

14{

15 person.Speak();

16}

17}

18

19 class Person

20{

21 public virtual void Speak()

22{

23 Console.WriteLine(“说话……”);

24}

25}

26

27 abstract class Chinese:Person

28{

29 public abstract override void Speak();

30}

31

32 class Pekingese:Chinese

33{

34 public override void Speak()

35{

36 Console.WriteLine(“说北京话……”);

37}

38}

39}


11.5 抽象类及抽象方法 - 图1

图 11-8 覆写方法示例

如图11-8所示,抽象类Chinese的抽象方法覆写了基类(Person)的虚方法Speak,而Chinese的Speak方法为抽象方法,因此并没有实现,而是将方法的实现留在派生类Pekingese中实现。

下面,我们将虚方法和抽象方法做个对比,如表11-1所示。

11.5 抽象类及抽象方法 - 图2