多态

C#中多态的实现

丶灬走出姿态 提交于 2020-03-06 18:54:44
由于可以继承基类的所有成员,子类就都有了相同的行为,但是有时子类的某些行为需要相互区别,而子类需要覆盖父类的方法来实现子类特有的行为,这就是所谓的多态,多态即相同类型的对象调用相同的方法却表现出不同行为的现象。 一.实现多态的两种常见方式 (1).虚方法(virtual):将父类的方法,添加关键字virtual,此方法在子类中用override重写。 (2).抽象类与抽象方法(abstarct):有时候基类的作用只是为子类提供公共成员,没有具体的实现操作,那么此时可以将基类及其方法定义为抽象的。子类中的方法仍用override重写。 二.虚方法(virtual)的使用 我们知道比较有名的车,有宝马,奔驰等,可以从它们中抽象出一个汽车基类,而宝马车,奔驰车作为子类 (1).基类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { public class Car { public virtual void carName() { Console.WriteLine("这是汽车"); } } } (2).子类 using System; using System

C# 面向对象的三大特性

荒凉一梦 提交于 2020-03-06 18:53:37
一、封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了。 那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。不需要借助于别人的力量就能完成这一件事情。这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。 1、访问权限(可见性) Public:(随处可见)所有包、类导入后均可见 公共的 Protected:(合法继承)本身、不同包的子类自身, Private:(自私自利)只在本类中可见 本类 同包类 public protected default private 不同包类 public protected default 子类 子类 public Protected(子类中,且子类自身使用) 其他类 public 2、 (1)、属性-->private(私有属性,公开方法,不用默认) (2)、方法--> public protected 书面的解释如下: 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。 二、继承: 还以为人为例

C#面向对象的三大特性概述

一笑奈何 提交于 2020-03-06 18:52:37
大家都知道面向对象的三大特性分别是:封装,继承,多态。但这三大特性分别是什么意思呢?这里我用自己的话将我的理解写出来,应该比较容易理解。 一,封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了。 那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。不需要借助于别人的力量就能完成这一件事情。这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。 书面的解释如下: 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。 二,继承: 还以为人为例,我们每个人都会有一些共同的特征,都要做一些相同的事情。比如:人都有一个脑袋,二只胳膊,二条脚,这是共同的特征。都要吃饭,喝水,这是都要做的相同的事情。那么如果我们现在要声明很多个人,每个人都会有这些特征,那我不是要写很多重复的代码?所以我们可以先建一个人的父类,这个父类不代表一个具体的人,只是一个拥有人所有共同特性的虚拟的人。下次我们要实例化一个具体的人的时候,只需要将这个人继承上面这个“虚拟的人”

C#面向对象的三大特征

拈花ヽ惹草 提交于 2020-03-06 18:51:36
一, 封装 : 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了。 那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。不需要借助于别人的力量就能完成这一件事情。这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。 书面的解释如下: 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。 二, 继承 : 还以为人为例,我们每个人都会有一些共同的特征,都要做一些相同的事情。比如:人都有一个脑袋,二只胳膊,二条脚,这是共同的特征。都要吃饭,喝水,这是都要做的相同的事情。那么如果我们现在要声明很多个人,每个人都会有这些特征,那我不是要写很多重复的代码?所以我们可以先建一个人的父类,这个父类不代表一个具体的人,只是一个拥有人所有共同特性的虚拟的人。下次我 们要实例化一个具体的人的时候,只需要将这个人继承上面这个“虚拟的人”,那么他就拥有了人的所有共同特性。这样,这些重复的代码我们就可以不写了。 当然,继承的目标不仅仅是为了节省代码,还有实现后面的多态的功能

C#面向对象的三大特性概述

旧街凉风 提交于 2020-03-06 18:50:45
一, 封装 : 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了。 那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。不需要借助于别人的力量就能完成这一件事情。这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。 书面的解释如下: 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。 二, 继承 : 还以为人为例,我们每个人都会有一些共同的特征,都要做一些相同的事情。比如:人都有一个脑袋,二只胳膊,二条脚,这是共同的特征。都要吃饭,喝水,这是都要做的相同的事情。那么如果我们现在要声明很多个人,每个人都会有这些特征,那我不是要写很多重复的代码?所以我们可以先建一个人的父类,这个父类不代表一个具体的人,只是一个拥有人所有共同特性的虚拟的人。下次我 们要实例化一个具体的人的时候,只需要将这个人继承上面这个“虚拟的人”,那么他就拥有了人的所有共同特性。这样,这些重复的代码我们就可以不写了。 当然,继承的目标不仅仅是为了节省代码,还有实现后面的多态的功能

PHP中的多态

爷,独闯天下 提交于 2020-03-06 12:46:13
PHP中的多态 多态定义:只关心一个接口或者基类,而不关心一个对象的具体类。(同一类型,不同结果) 这里两个例子: 第一个,我们发现,基类定义了标准,子类进行了自我规则的实现。这是多态的一个要求。同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程。因为你调用的时候不是 stu->showGrade() 而是各自自己的方法; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class stu{ public function showGrade(){ echo "base class" ; } } class xiaomin extends stu{ public function showGrade(){ echo "is son show 80" ; } } class xiaoli extends stu{ public function showGrade(){ echo "is son show 60" ; } } function doit( $obj ){ if (get_class( $obj ) != "stu" ){ $obj ->showGrade(); } } doit( new xiaoli())

Java自学笔记之抽象类(abstract)

﹥>﹥吖頭↗ 提交于 2020-03-06 03:25:24
抽象函数 抽象类概述:抽象就是看不懂的。 抽象类特点: 抽象类和抽象方法必须用 abstract 关键字修饰。 abstract class 类名 { } public abstract void test ( ) ; 抽象类不一定有抽象方法,有抽象方法的类不一定是抽象类或者是接口。 抽象类不能实例化,那么按照多态的方式,由具体子类实例化。这也是多态的一种,抽象类多态。 抽象类的子类要么是抽象类要么重写抽象类中的所有抽象方法 abstract class Hello { //抽象函数。 需要 abstract 修饰, 并以分号;结束 abstract void work ( ) ; } 抽象类成员的特点: 成员变量:既可以是变量,也可以是常量。 构造方法:抽象类是一个类,所以,它有构造方法,用于子类访问父类数据的初始化。 成员方法:既可以是抽象的,也可以是非抽象的。 abstract class People { public People ( ) { //构造方法 } String name = "张三" ; // 变量 final int NUM = 1 ; // 常量 abstract void test ( ) ; // 抽象方法 public void work ( ) { // 非抽象方法 System . out . println ( "上班....." ) ; }

依赖注入实例

我怕爱的太早我们不能终老 提交于 2020-03-05 20:40:11
目录 1 IGame游戏公司的故事 1.1 讨论会 1.2 实习生小李的实现方法 1.3 架构师的建议 1.4 小李的小结 2 探究依赖注入 2.1 故事的启迪 2.2 正式定义依赖注入 3 依赖注入那些事儿 3.1 依赖注入的类别 3.1.1 Setter注入 3.1.2 Construtor注入 3.1.3 依赖获取 3.2 反射与依赖注入 3.3 多态的活性与依赖注入 3.3.1 多态性的活性 3.3.2 不同活性多态性依赖注入的选择 4 IoC Container 4.1 IoC Container出现的必然性 4.2 IoC Container的分类 4.2.1 重量级IoC Container 4.2.2 轻量级IoC Container 4.3 .NET平台上典型IoC Container推介 4.3.1 Spring.NET 4.3.2 Unity 参考文献 1 IGame游戏公司的故事 1.1 讨论会 话说有一个叫IGame的游戏公司,正在开发一款ARPG游戏(动作&角色扮演类游戏,如魔兽世界、梦幻西游这一类的游戏)。一般这类游戏都有一个基本的功能,就是打怪(玩家攻击怪物,借此获得经验、虚拟货币和虚拟装备),并且根据玩家角色所装备的武器不同,攻击效果也不同。这天,IGame公司的开发小组正在开会对打怪功能中的某一个功能点如何实现进行讨论

实验二Java面向对象程序设计

扶醉桌前 提交于 2020-03-05 17:24:26
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:王国伊 学号:20135207 成绩: 指导教师:娄嘉鹏 实验日期:2015.5.8 实验密级:无 预习程度: 实验时间:15:30~18:00 仪器组次:07 必修/选修:选修 实验序号:02 实验名称: Java 面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和 TDD ; 2. 理解并掌握面向对象三要素:封装、继承、多态; 3. 初步掌握 UML 建模; 4. 熟悉 S.O.L.I.D 原则; 5. 了解设计模式。 实验仪器: 名称 型号 数量 PC机 Lenovo Z485 1 Linux虚拟机 Ubuntu(32bit) 1 实验步骤 一、单元测试 三种代码 编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。当我们想用程序解决问题时,要会写三种码: 伪代码 产品代码 测试代码 需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。 伪代码: 产品代码: 测试代码: 经过几次修改后得到可以通过自己测试的代码,即能够实现需求的代码。 这时测试都符合预期了,我们把MyUtil.java提供给别人使用时,他人可以按照要求实现需求。为保证单元测度是充分的,我们的一般要求是测试代码要比产品代码多。 2

多态性vs覆盖vs重载

a 夏天 提交于 2020-03-05 16:00:02
就Java而言,当有人问: 什么是多态性? 重载 或 重载 是可以接受的答案吗? 我认为还有更多。 如果您有一个抽象基类,它定义了一个没有实现的方法,并且您在子类中定义了该方法,那该方法是否仍然覆盖? 我认为 过载 不是肯定的正确答案。 #1楼 就其 含义 而言,多态性更有可能...在Java中覆盖 这都是关于SAME对象在不同情况下的不同行为(以编程方式...您可以调用不同的ARGUMENTS) 我认为以下示例将帮助您理解...尽管不是纯Java代码... public void See(Friend) { System.out.println("Talk"); } 但是,如果我们更改ARGUMENT ...的行为将被更改... public void See(Enemy) { System.out.println("Run"); } 人员(此处为“对象”)是相同的... #2楼 多态性是指不止一种形式,同一对象根据需要执行不同的操作。 多态可以通过两种方式实现,即 方法覆盖 方法重载 方法重载 是指使用相同的方法名称在同一类中编写两个或多个方法,但是传递的参数不同。 方法覆盖 意味着我们在不同的类中使用方法名称,这意味着在子类中使用父类方法。 在Java中,为了实现多态性,超类引用变量可以保存子类对象。 为了实现多态,每个开发人员必须在项目中使用相同的方法名称。 #3楼