深入.net(多态二)

时间:2022-09-03 16:22:13

代码优化技术:

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

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

“多态”的形式:

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

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

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

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

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

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

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

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

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

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

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

虚方法

抽象方法

virtual

abstract

必须有方法体  {      }

不允许有方法体

什么地方都行

只能”抽象类“中

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

必须重写

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

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

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

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

深入.net(多态二)的更多相关文章

  1. java 多态二

    一 多态-转型 多态的转型分为向上转型与向下转型两种: 向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型  变量名 = new 子类类型() ...

  2. C++ 类的多态二(函数重载--函数重写--函数重定义)

    //函数重载--函数重写--函数重定义 #include<iostream> using namespace std; /* 函数重载: 必须在一个类中进行(子类无法重载父类中的函数) 子 ...

  3. python&lowbar;way&comma;day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】

    python_way day8 一.面向对象三大特性: 多态 二.面向对象中的成员 字段.方法属性 三.成员修饰符 四.特殊成员 __init__.__doc__.__call__.__setitem ...

  4. Java面向对象的三大特性之一 多态

    多态: 子类重写父类方法 1)位置:子类和父类中有同名的方法 2)方法名相同,返回类型和修饰符相同,参数列表相同       方法体不同 多态的优势和应用场合 多态:同一个引用类型,使用不同的实例而执 ...

  5. 封装继承多态-java面向对象三大特征

    第七章  封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...

  6. Java 中override、overload、overwrite区别,以及与多态的关系【转】

    因为早期的翻译导致了override和overwrite的解释及理解混乱,需要重新梳理这几个词及相关内容. 转自:http://blog.csdn.net/lzhang007/article/deta ...

  7. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  8. 大数据笔记(二十四)——Scala面向对象编程实例

    ===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...

  9. C&plus;&plus;类的多态

    目录 一.静态多态 二.动态多态 三.虚函数 四.纯虚函数 五.C++ 接口(抽象类) 六.应用经验 七.版权声明 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就可 ...

随机推荐

  1. FTP弱口令猜解【python脚本】

    ftp弱口令猜解 python脚本: #! /usr/bin/env python # _*_ coding:utf-8 _*_ import ftplib,time username_list=[' ...

  2. list笔记总结

    1.list是一个复合的复制函数,可以将一个数组一次赋给多个变量.我们常用以下语句遍历一个数组. $arr = array('东','男','西','北'); while(list($k,$v)=ea ...

  3. 【HDOJ】【3037】Saving Beans

    排列组合 啊……这题是要求c(n-1,0)+c(n,1)+c(n+1,2)+......+c(n+m-1,m) 这个玩意……其实就等于c(n+m,m) 好吧然后就是模P……Lucas大法好= = 我S ...

  4. dir&lpar;&rpar;函数:罗列出参数所有的功能列表

    #coding=utf-8import sysprint dir(sys)#罗列出参数中所有的功能列表sys.__doc__#调用参数中的函数 #dir()函数扩展展详解python中dir()函数不 ...

  5. 2015 多校联赛 ——HDU5302(矩阵快速幂)

    The Goddess Of The Moon Sample Input 2 10 50 12 1213 1212 1313231 12312413 12312 4123 1231 3 131 5 5 ...

  6. Azure存储账户的日志分析方法

    1.首先确认日志功能是否开启(日志文件根据存储账户的类型,按使用量收费 . 2.在存储账户-Usage(classic)-Metrics中查看突出流量的时间: 3.在Explorer中下载对应时间点的 ...

  7. Git学习之忽略特殊文件&period;gitignore的配置

    1.Mac中使用Git上传项目代码时忽略.DS_Store文件 简单的说Mac每个目录都会有个文件叫.DS_Store,它是用于存储当前文件夹的一些Meta信息.所以每次查看Git目录的状态,如果没有 ...

  8. UOJ14 DZY Loves Graph 并查集

    传送门 题意:给出一张$N$个点,最开始没有边的图,$M$次操作,操作为加入边(边权为当前的操作编号).删除前$K$大边.撤销前一次操作,每一次操作后询问最小生成树边权和.$N \leq 3 \tim ...

  9. CAS缺点

      CAS虽然很高效的解决原子操作,但是CAS仍然存在三大问题.ABA问题,循环时间长开销大和只能保证一个共享变量的原子操作 1.  ABA问题.因为CAS需要在操作值的时候检查下值有没有发生变化,如 ...

  10. &lbrack;Ubuntu&rsqb;管理开机启动项的软件

    sudo apt-get install sysv-rc-conf