深入.net(多态一)
当您在 编写一个类时,如果您发现你需要编写的“属性”和“方法”曾经在已有的类中实现,则,您可以将其共用的“属性”和“方法”剪切到一个新的“类”中,然后,让两个类共同继承这个“新类”。(使用 :,体现继承关系)
此时,被继承类我们称为“父类”(基类),继承父类的类,我们称为“子类”(派生类)。所有的子类拥有父类所有对外公开的属性和方法,同时可以使用父类protected的资源。因此,我们完全可以说:“子类完全可以替换父类” ----- 里氏替换原则!
当一个子类“替换”父类时:
1、只能看到父类的“方法列表”,而无法看到和使用子类自己的“新方法”
2、如果要使用其替换子类的“新方法”:
步骤一:先识别 ( is ) if (item is Teacher){}
步骤二:再转换
类型强行转换 ----(Teacher)item
as 进行转换 ---item as Student
---- 两种转换方式的区别:类型强制转换,如果转换失败,抛出异常!
而使用 as 进行类型转换,转换失败,不会抛出异常,转换结果为NULL。
3、当子类与父类,同时拥有“同签名的方法”(方法名相同、参数列表相同、返回类型相同)有如下几种情况:
|
父类 |
子类 |
表现出的结果 |
|
方法无改变 |
方法前New(可省略) |
执行父类的方法 |
|
virtual 修饰方法 |
方法前New(可省略) |
执行父类的方法 |
|
virtual 修饰方法 |
override修饰方法 |
子类的方法 |
|
方法无改变 |
override修饰方法 |
编译错误(override必须成对出现) |
4、多态 ----- 相同的“方法调用”,却得到不同的“业务响应”;
应用场景:当对象的创建代码经常发生改变时(新的子类不断出现,新的业务实现不断的出现),会导致关联业务(使用子类的地方)频繁发生变化!此时,您可以考虑将创建对象的代码,统一放置到一个类中(工厂类),这样有新的子类诞生时,只需要修改工厂类的“创建方法”【简单工厂设计模式】
出发点:
上一个项目写的代码,后续的项目要能继续使用; ---- 可复用【继承】
项目做完后,要新功能时,最好只做少量改动,不影响原有功能; ---- 可扩展
项目做完后,需求变化时,能快速修改,且少改动、还要稳定; ---- 可维护
深入.net(多态一)的更多相关文章
- Java中的多态
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...
- C# 工厂模式+虚方法(接口、抽象方法)实现多态
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...
- C#非常重要基础之多态
前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历.过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用.结果这 ...
- C++多态详解
多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...
- 【那些年关于java多态应用】
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...
- JAVA多态
多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...
- C#多态“说来也说”——逻辑层BLL中的多态使用
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/5861842.html 昨天晚上,有个朋友说学了好久,依然没搞 ...
- java多态的理解
面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...
- java中如何实现多态
复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...
- OC多态
要点: 1.多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象.对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同.当通过此引用向对象发送消息,调 ...
随机推荐
- 让我们开启数据库无Linq、零sql时代
让我们开启数据库无Linq.零sql时代 Moon.Orm 5.0总论 第一部分 MQL Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 1. ...
- struct
struct QSortStack { public int high; public int low; } QSortStack* stack = ]; unsafe static void qso ...
- Dapper学习 - Dapper的基本用法(二) - 存储过程/函数
上一篇貌似少介绍了自定义函数和存储过程, 因为这两个也可以使用查询的方式来实现功能, 这一篇就补上 一.自定义函数的创建和调用 (mysql的) Delimiter $$ drop function ...
- [Asp.net 5] Localization-简单易用的本地化-全球化信息
本篇比较简单介绍Localization解决方案中: Microsoft.Framework.Globalization.CultureInfoCache 工程 CultureInfoGenerato ...
- 控件使用经验-MVP模式+控件封装
项目背景 几年前参与了一个面向学校的人事管理软件的开发,基于WinForm平台.今天主要想谈一谈其中关于控件的使用经验.这个项目我们大量使用了第三方控件.由于这个产品的生命周期很长,我们在设计时要考虑 ...
- asp.net后台注册js的四种方法
1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("kel ...
- c#单例模式的实现
单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供. 实现要点: 1.是单例模式的类只提供私有的构造函数. 2.是类定义中含有一个该类的静态私有对象. 3.是该类提供了一个静态的共 ...
- Lua使用心得(1)
这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口.组件,随便你怎么叫),希望能用脚本来控制主程序的行为.这实 ...
- SSH实例(4)
Clas.hbm.xml文件如下: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibe ...
- Java递归列出所有文件和文件夹
package file_op; import java.io.File; public class file_list { static int n =0; /** * @param args */ ...