zoukankan      html  css  js  c++  java
  • 深入.net(多态二)

    代码优化技术:

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

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

     

    “多态”的形式:

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

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

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

     

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

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

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

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

     

     

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

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

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

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

     

                        
      

     虚方法

      
      

    抽象方法

      
      

    virtual

      
      

    abstract

      
      

    必须有方法体  {      }

      
      

    不允许有方法体

      
      

    什么地方都行

      
      

    只能”抽象类“中

      
      

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

      
      

    必须重写

      

     

     

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

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

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

      • 如果,多个类具有“相同的属性”和“相同业务逻辑”的方法,我们就可以将其剪切到一个“父类”中,并让这多个类“继承”于该父类。
      • 如果,这多个类实现“同样功能”的方法中,部分类“实现逻辑一致”,个别类实现逻辑不一样,此时,将大部份相同的实现逻辑,剪切到“父类”,但是该剪切的方法使用virtual进行修饰,并将未剪切的类的方法前加上override。
      •  如果,这多个类实现“同样功能”的方法中,各自实现的逻辑都不同,此时,只提取方法的签名到“父类”,并使用abstract进行修饰。当然子类使用override重写。
      •  如果,不是所有的子类都具有“某功能”,而只有部分子类具有!将其方法签名提取到一个接口中,并让该子类在继承父类的基础上,再继承于该接口。通过该接口实现多态!
  • 相关阅读:
    Codeforces 1291 Round #616 (Div. 2) B
    总结
    刷新DNS解析缓存+追踪+域名解析命令
    数学--数论--Hdu 5793 A Boring Question (打表+逆元)
    Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
    LeetCode 117 Populating Next Right Pointers in Each Node II
    LeetCode 116 Populating Next Right Pointers in Each Node
    test test
    LeetCode 115 Distinct Subsequences
    LeetCode 114. Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/why168888/p/4283618.html
Copyright © 2011-2022 走看看