博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象的多态性

Posted on 2009-06-06 01:09  记录  阅读(15460)  评论(0编辑  收藏  举报

多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。实现多态的方式:

一、抽象类和抽象方法

    1、 抽象类的语法:

                         访问修饰符 abstrac class 类名

    2、 父类中的方法:

                         访问修饰符 abstrac 返回类型 方法();

注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。

         抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。

         抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。

    3、重写抽象方法:

                          访问修饰符 override 返回类型 方法()

     4、使用场合:

                       A 父类提供了一个功能或者规定,约束子类的行为。

 示例:

Code

里氏替换原则

     "is"操作符用于检查对象是否与给定的类型相同。如: if(obj is string){}

     "as"用于两个对象之间的类型转换。如:string as obj;

注意:as运算符当转换失败时,运算符将产生空,而不是引发异常。

        is转换失败要发生异常。

二、虚方法:

                访问修饰符 virtual 返回类型 方法()

               {

                     //方法体

               }

 1、每个对象Object都有一个Equals()方法,用于确定两个实例对象是否相等,它是一个虚方法,可以重写这个方法。

      public virtual bool Equals(Object obj)

      默认情况下,Equals()方法只支持引用相等,也就是相比较的两个对象是否引用同一个对象。

      重写Equals()虚方法如:

Code

2、虚方法和抽象方法的区别:

  A、修饰的关键字不同

  B、父类中方法体的区别

  C、重写的区别(抽象方法必须override)

  D、抽象方法只能在抽象类中,而虚方法除了密封类外都可以写

3、方法重写的条件:

     A、方法签名必须一样

     B、访问修饰符允许被放大

     C、返回类型必须一样   

总结:面向对象的三大特征

        封装:保证对象自身数据的完整性、安全性

        继承:建立类之间的关系,实现代码复用、方便系统的扩展

        多态:相同的方法调用可实现不同的实现方式

三、方法重载

      1、与重写方法的区别

           A、应用场合不同:如果父类中有abstract/virtual,才能被重写,重写方法要求类与类之间是继承关系。

                                    而重载没有过多的要求。

四、方法隐藏:父类和子类的方法都存在。

五、静态(satice)类/密封(sealed)类/抽象(abstract)类它们各自的特点: