4.1.2 类的多态

来源:互联网 发布:淘宝新店卖啥好 编辑:程序博客网 时间:2024/06/16 14:39

4.1.2 类的多态

多态是面向对象编程的基本特征之一,它使得派生类的实例可以直接赋予基类的对象,然后直接就可以通过这个对象调用派生类的方法。

c#中,类的多态是通过在派生类中重写基类的虚方法来实现的。

 

1. 虚方法的重写

在类的方法前面加上关键字virtual,则称该方法为虚方法,通过对虚方法的重写,可以实现在程序运行过程中确定调用的方法。

重写就是在派生类中将基类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或者修改成员方法的返回值类型。





2. 抽象类与抽象方法

如果一个类不与具体的事物相联系,只是表达一种抽象的概念或行为,仅仅作为其派生类的一个基类,这样的类就可以声明为抽象类。

在抽象类中声明方法时,如果用上abstract 关键字,则该方法为抽象方法。

在c#中,类中只要有一个方法声明为抽象方法,则这个类必须被声明为抽象类。

抽象类主要用于提供多个派生类可共享的基类的公共定义,和非抽象类的主要区别为:

       抽象类不能直接实例化。

       抽象类可以直接包含抽象成员,但非抽象类中则不可以。

       抽象类不能被密封。

抽象类的声明格式为:

访问修饰符  abstract  class 类名  :基类或 接口

{      // 类成员或方法          }

声明抽象类时,除abstract 关键字、class 关键字和类名外,其他的都时可选项。


抽象类中定义的方法,如果加上 abstract 关键字,就是一个抽象方法。

抽象方法不提供具体的实现,有的方法并不需要具体的实现,而是让派生类来重修实现。

声明抽象方法注意点: 

        抽象方法必须声明在抽象类中。

        声明抽象方法时,不能使用 virual 、static、private修饰符。

例:   public abstract class TestClass

{

public abstract  void  AbsMethod();   //抽象方法

}

当从抽象类派生一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现,重写抽象方法时用override 关键字。

抽象派生类的实例化不能从基类创建对象,只能通过子类创建对象并实例化。



3. 密封类和密封方法

密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。

密封类的语法格式:

访问修饰符  sealed  class  类名 :基类或接口

{  //密封类的成员   }

如果类的方法声明中包含了sealed  修饰符,则称该方法为密封方法。

密封方法只能用于对基类的虚方法进行实现,因此,声明密封方法时,sealed修饰符总是和override 修饰符同时使用。

0 0
原创粉丝点击