深入.net(多态二)

代码优化技术:

        通过“继承”技术,实现代码的复用,减少代码的编写量。

        因为子类继承父类,拥有了父类所有对外公开“属性”和“方法”,所以,在系统中,完全可以由子类替代父类(里氏替换原则)!在替代的过程中,子类不仅仅能替代父类完成与父类一模一样的业务功能,也可以使用“自己业务逻辑”替代掉“父类原有的业务逻辑”,这样,不同的子类在替换父类时,就能够表现出“不同业务形态”---多态。

 

“多态”的形式:

形式一: 父类      obj = New  子类();   --- virtual【虚方法】

形式二:抽象类  obj  =  New   子类();   ---  abstruct【抽象方法】、virtual【虚方法】

形式三:接口       obj =  New  实现类(); ---  【接口方法】

 

“抽象方法”及“抽象类”:

         抽象方法 ---- 只有方法的描述,而没有具有实现!({ })用于描述本类,想要但无法去实现的“业务功能”!

         抽象类 -------  含有抽象方法,或者被使用abstruct修饰的类。抽象类是不能够使用New创建实例的!

         注意: 当一个子类继承了“抽象类”时,您必须实现其“所有的抽象方法”!(除非子类也是抽象的)

 

 

三种“多态”形式的比较:

       形式一:父类方式,站在“代码实现”的角度,父类为子类提供代码实现的基础,减少新类的代码开发量。

       形式三:接口方式,站在“框架设计”的角度,实现多态性。不涉及一点点的代码实现。

       形式二:抽象类,是一种折中的方式。既有对子类的“业务支撑”,同时对子类有苛刻的业务要求。【抽象类的语法是最宽泛的:字段、属性、业务方法、构造方法、虚方法、抽象方法。】

 

                    
  

 虚方法

  
  

抽象方法

  
  

virtual

  
  

abstract

  
  

必须有方法体  {      }

  
  

不允许有方法体

  
  

什么地方都行

  
  

只能”抽象类“中

  
  

子类可以重写,也可以不重写

  
  

必须重写

  

 

 

如何让我们的代码编写,能体现出OO特性:

         -------  从代码实现角度

         在编写一个个业务类的过程中,

    • 如果,多个类具有“相同的属性”和“相同业务逻辑”的方法,我们就可以将其剪切到一个“父类”中,并让这多个类“继承”于该父类。
    • 如果,这多个类实现“同样功能”的方法中,部分类“实现逻辑一致”,个别类实现逻辑不一样,此时,将大部份相同的实现逻辑,剪切到“父类”,但是该剪切的方法使用virtual进行修饰,并将未剪切的类的方法前加上override。
    •  如果,这多个类实现“同样功能”的方法中,各自实现的逻辑都不同,此时,只提取方法的签名到“父类”,并使用abstract进行修饰。当然子类使用override重写。
    •  如果,不是所有的子类都具有“某功能”,而只有部分子类具有!将其方法签名提取到一个接口中,并让该子类在继承父类的基础上,再继承于该接口。通过该接口实现多态!
原文地址:https://www.cnblogs.com/why168888/p/4283618.html