深入.net(多态二)
通过“继承”技术,实现代码的复用,减少代码的编写量。
因为子类继承父类,拥有了父类所有对外公开“属性”和“方法”,所以,在系统中,完全可以由子类替代父类(里氏替换原则)!在替代的过程中,子类不仅仅能替代父类完成与父类一模一样的业务功能,也可以使用“自己业务逻辑”替代掉“父类原有的业务逻辑”,这样,不同的子类在替换父类时,就能够表现出“不同业务形态”---多态。
“多态”的形式:
形式一: 父类 obj = New 子类(); --- virtual【虚方法】
形式二:抽象类 obj = New 子类(); --- abstruct【抽象方法】、virtual【虚方法】
形式三:接口 obj = New 实现类(); --- 【接口方法】
“抽象方法”及“抽象类”:
抽象方法 ---- 只有方法的描述,而没有具有实现!({ })用于描述本类,想要但无法去实现的“业务功能”!
抽象类 ------- 含有抽象方法,或者被使用abstruct修饰的类。抽象类是不能够使用New创建实例的!
注意: 当一个子类继承了“抽象类”时,您必须实现其“所有的抽象方法”!(除非子类也是抽象的)
三种“多态”形式的比较:
形式一:父类方式,站在“代码实现”的角度,父类为子类提供代码实现的基础,减少新类的代码开发量。
形式三:接口方式,站在“框架设计”的角度,实现多态性。不涉及一点点的代码实现。
形式二:抽象类,是一种折中的方式。既有对子类的“业务支撑”,同时对子类有苛刻的业务要求。【抽象类的语法是最宽泛的:字段、属性、业务方法、构造方法、虚方法、抽象方法。】
|
虚方法 |
抽象方法 |
|
virtual |
abstract |
|
必须有方法体 { } |
不允许有方法体 |
|
什么地方都行 |
只能”抽象类“中 |
|
子类可以重写,也可以不重写 |
必须重写 |
如何让我们的代码编写,能体现出OO特性:
------- 从代码实现角度
在编写一个个业务类的过程中,
- 如果,多个类具有“相同的属性”和“相同业务逻辑”的方法,我们就可以将其剪切到一个“父类”中,并让这多个类“继承”于该父类。
- 如果,这多个类实现“同样功能”的方法中,部分类“实现逻辑一致”,个别类实现逻辑不一样,此时,将大部份相同的实现逻辑,剪切到“父类”,但是该剪切的方法使用virtual进行修饰,并将未剪切的类的方法前加上override。
- 如果,这多个类实现“同样功能”的方法中,各自实现的逻辑都不同,此时,只提取方法的签名到“父类”,并使用abstract进行修饰。当然子类使用override重写。
- 如果,不是所有的子类都具有“某功能”,而只有部分子类具有!将其方法签名提取到一个接口中,并让该子类在继承父类的基础上,再继承于该接口。通过该接口实现多态!
深入.net(多态二)的更多相关文章
- java 多态二
一 多态-转型 多态的转型分为向上转型与向下转型两种: 向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型 变量名 = new 子类类型() ...
- C++ 类的多态二(函数重载--函数重写--函数重定义)
//函数重载--函数重写--函数重定义 #include<iostream> using namespace std; /* 函数重载: 必须在一个类中进行(子类无法重载父类中的函数) 子 ...
- python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】
python_way day8 一.面向对象三大特性: 多态 二.面向对象中的成员 字段.方法属性 三.成员修饰符 四.特殊成员 __init__.__doc__.__call__.__setitem ...
- Java面向对象的三大特性之一 多态
多态: 子类重写父类方法 1)位置:子类和父类中有同名的方法 2)方法名相同,返回类型和修饰符相同,参数列表相同 方法体不同 多态的优势和应用场合 多态:同一个引用类型,使用不同的实例而执 ...
- 封装继承多态-java面向对象三大特征
第七章 封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...
- Java 中override、overload、overwrite区别,以及与多态的关系【转】
因为早期的翻译导致了override和overwrite的解释及理解混乱,需要重新梳理这几个词及相关内容. 转自:http://blog.csdn.net/lzhang007/article/deta ...
- python中对多态的理解
目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...
- 大数据笔记(二十四)——Scala面向对象编程实例
===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...
- C++类的多态
目录 一.静态多态 二.动态多态 三.虚函数 四.纯虚函数 五.C++ 接口(抽象类) 六.应用经验 七.版权声明 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就可 ...
随机推荐
- JAVA - JAVA编译运行过程
Java编译原理 *.java→*.class→机器码 java编译器 (编译) → 虚拟机(解释执行) → 解释器(翻译) → 机器码 1.Java编译过程与c/c++编译过程不同 Java编译程 ...
- iis 不能访问json文件
我从网上查的资料,解决方案都是设置MIME 映射和“处理脚本映射”. 我按照网上的解决方案执行之后还没有解决我的这个问题,所以我想会不会是其他的原因. 在那么一瞬间,灵光一闪,我把json文件放到新建 ...
- ASP.NET MVC图片管理(删除)
上星期有写了一篇<ASP.NET MVC图片管理(上传,预览与显示)>http://www.cnblogs.com/insus/p/4620420.html 它只实现了上传功能,即时预览以 ...
- Entity Framework 实体框架的形成之旅--为基础类库接口增加单元测试,对基类接口进行正确性校验(10)
本篇介绍Entity Framework 实体框架的文章已经到了第十篇了,对实体框架的各个分层以及基类的封装管理,已经臻于完善,为了方便对基类接口的正确性校验,以及方便对以后完善或扩展接口进行回归测试 ...
- Winform开发框架中实现信息阅读状态的显示和存储
在很多项目中,可能会有要求对一些数据的阅读状态进行记录,用户阅读过或者未阅读过,都做不同的标识,方便了解数据的状态.如在我的客户关系管理系统中,对于客户的状态进行跟踪,如果最近联系时间超过配置天数的, ...
- java servlet手机app访问接口(四)推送
一. 服务端DEMO下载及运行. 登录友盟后,浏览器直接输入下面这个URL,直接进入文档开发和DEMO下载页面:http://dev.umeng.com/push/ios/integration(下面 ...
- Thinkphp 用PHPExcel 导入Excel
搞了个简单的Excel导入, 用的是PHPExcel(百科:用来操作Office Excel文档的一个PHP类库, 基于微软的OpenXML标准和PHP语言) 好, 不说了, 开始吧... 首先得有P ...
- 泛函编程(36)-泛函Stream IO:IO数据源-IO Source & Sink
上期我们讨论了IO处理过程:Process[I,O].我们说Process就像电视信号盒子一样有输入端和输出端两头.Process之间可以用一个Process的输出端与另一个Process的输入端连接 ...
- JAVA抽象方法,接口
抽象方法(例如:画方法) 抽象方法必须用abstract void修饰 抽象方法没有方法体(方法体就是方法的实现) 抽象方法和空方法体的方法不是同意概念. a) public abstract vo ...
- ahjesus code simith 存储过程模板
<%------------------------------------------------------------------------------------------ * Au ...