Taran Chen

每周只读一本书

导航

区分虚方法,抽象方法如此简单

    记得当时自己学习C# 的封装性和多态性的时候一直会被搞迷糊.

    回想起当时迷糊的路线图是这样的(看.net SDK):

    抽象类(清楚)-------à密封类(清楚)----à抽象方法(坚持清楚)---à虚方法(没坚持住,迷糊了)

当然中间也掺杂着继承,多态,Override,Overload等概念,越看越迷糊,后来理了一下思路,发现我们先搞清楚两个概念,一切都变得简单了,这两个概念就是:”抽象方法”,”虚方法”

 

首先声明一个概念:抽象方法有对应的抽象类,虚方法绝对没有对应的虚类或虚拟类

   关键词abstract(抽象)的修饰范围是:类,方法,属性,索引器或事件

   关键词virtual(虚拟)的修饰范围是:方法,属性,索引器或事件

 

 好,下面我们来说两个的区别

    虚方法:

      概念:使用关键词Virtual创建的方法称为虚方法

      用法:将关键词Virtual添加到方法的返回类型的前面

      模样:public virtual void Method(int i) { }

      特点:1.方法定义后面必须有“{}”,可以有实现体,也就是说“{}”里可以有实现体也可以没有。

            2.可以定义在除密封类的所有类中。

            3.虚方法在派生类中可以被重写也可以不被重写

 

 抽象方法:

   概念: 使用关键词abstract创建的方法称为抽象方法.

   用法: 将关键字 abstract 添加到方法的返回类型的前面.

   模样: public abstract void Method(int i);

   特点: 1.(必须)没有实现体,方法定义后面是分号”;”

         2.抽象方法必须定义在抽象类中

         3.抽象方法在派生类中必须被重写

         4.存在抽象方法的类必须定义成抽象类

            我在特点的描述上用了很多 ”必须” 以澄清概念。

 

大家可以看到抽象方法比虚方法限制更多,所以有些人说抽象方法是一个特殊的虚方法。

 

概念说完了,下面我们来看一个实例:

 

public abstract class Employee //抽象类

 

public class Intern : Employee //实习生类,继承自抽象类Employee
public class FullTimeEmployee : Employee //全职员工,继承自抽象类Employee

好,接下来我们来调用.

 

调用

 

结果我想大家都一直知道了.

Taran Chen gets 1500 yuan per month

Tom is FullTimeEmployee,can get 11000 yuan per month

 

好了,实例也说完了,希望对你有所帮助。

posted on 2008-11-21 17:52  TaranChen  阅读(1053)  评论(5编辑  收藏  举报