多态

多态

梦想的初衷 提交于 2020-01-27 13:51:53
面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 实现代码的重用 ,相同的代码不需要重复的编写 设计类的技巧 子类针对自己特有的需求,编写特定的代码 多态 不同的 子类对象 调用相同的 父类方法 ,产生不同的执行结果 多态 可以 增加代码的灵活度 以 继承 和 重写父类方法 为前提 是调用方法的技巧, 不会影响到类的内部设计  多态案例演练 需求 在 Dog 类中封装方法 game 普通狗只是简单的玩耍 定义 XiaoTianDog 继承自 Dog ,并且重写 game 方法 哮天犬需要在天上玩耍 定义 Person 类,并且封装一个 和狗玩 的方法 在方法内部,直接让 狗对象 调用 game 方法  案例小结 Person 类中只需要让 狗对象 调用 game 方法,而不关心具体是 什么狗 game 方法是在 Dog 父类中定义的 在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果 多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化! class Dog(object): def __init__(self, name): self.name = name def game(self): print("%s 蹦蹦跳跳的玩耍..." % self.name) class XiaoTianDog

Java中多态的理解总结

倾然丶 夕夏残阳落幕 提交于 2020-01-26 09:38:11
多态:polymorphism 多态: poly + morphism 许多形态 在希腊语中,poly指的是许多,morphism指的是形态 其中多态包括: 编译时多态 运行时多态 编译时多态: 在编译时决定编译所需要使用的目标方法。通常是父类所决定 运行时多态: 在运行时决定运行所需要使用的目标方法,通常是子类所决定,如果子类没有重写父类该方法,那么将使用父类的方法。 其实编译时多态和运行时多态就是我们常说的,编译看父类,运行看子类,在使用多态的时候,编译时应注意父类有无声明该方法,若无声明,那么将编译报错。 举例体现多态 创建一个父类 package Fs ; public class Father { void eat ( ) { System . out . println ( "father eat" ) ; } void sleep ( ) { System . out . println ( "father sleep" ) ; } } 创建一个子类1,只重写父类的eat方法 package Fs ; public class Son_1 extends Father { @Override void eat ( ) { System . out . println ( "son1 eat" ) ; } } 创建一个子类2,重写父类的eat和sleep方法

软件设计——继承、多态、绑定、重置、创建型设计模式、结构型设计模式和行为设计模式

 ̄綄美尐妖づ 提交于 2020-01-26 01:51:02
补充: 继承: 父类和子类之间 共享数据和方法 的机制,一个父类可以有多个子类,父类描述了这些子类的公共属性和方法,一个子类可以继承它的父类中的属性和方法,这些属性和操作在子类中不必定义,子类中还可以定义自己的属性和方法。 多态: 在收到消息时,对象要给予响应,不同的对象收到同一消息可以产生完全不同的结果 参数多态: 一个类型是另一个类型的子类型 过载多态: 同一个名字在不同的上下文中所代表的含义不同 静态绑定: 在编译时进行的 动态绑定: 在运行时进行的,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接 重置/覆盖: 在子类中重新定义父类中已经定义的方法,其基本思想是通过一种动态绑定机制的支持,使得子类在继承父类接口定义的前提下用适合自己要求的实现去置换父类中的相应实现 重载: 一个类可以具有多个同名而参数类型列表不同的方法,每个方法实现自己的特定行为 创建型设计模式: 抽象工厂(Abstract Factory): ① 意图: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类 ②模式适应于: 一个系统要独立于它的产品的创建、组合和表示时。 一个系统要由多个产品系列中的一个配置时。 当要强调一系列相关的产品对象的设计以便进行联合使用时。 当提供一个产品类库,只想显示它们的接口而不是现实时。 例: 使用一个汽车生产来做例子

JAVA基础

ぃ、小莉子 提交于 2020-01-25 23:50:40
java重写和重载 重写: 是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改 变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要 实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一 个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子 类异常 重载: 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也 可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重写和重载的区别 方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与 子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。 (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类 型和次序不同,则称为方法的重载(Overloading)。 (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回 值也一样的方法,就称为重写

JAVA学生的生活(多态)

一个人想着一个人 提交于 2020-01-25 21:14:08
多态性是面向对象编程的基础。它允许多个方法使用同一个接口。Java从多个方面支持多态性,最为突出的是:每个方法都可以被子类重写;设立interface关键字。当把子类对象当作父类对象来看时,就只能调用父类中原有定义的属性和方法。子类自己扩展的属性和方法就不能调用了。当把子类对象当作父类对象来看时,如果子类重写了父类中的方法,则调用该方法时调用的是子类重写后的方法。 package JAVA_Project_01_05 ; //· 多态性是面向对象编程的基础。它允许多个方法使用同一个接口。Java从多个方面支持多态性,最为突出的是:每个方法都可以被子类重写;设立interface关键字。 // //· 当把子类对象当作父类对象来看时,就只能调用父类中原有定义的属性和方法。子类自己扩展的属性和方法就不能调用了。 // //· 当把子类对象当作父类对象来看时,如果子类重写了父类中的方法,则调用该方法时调用的是子类重写后的方法。 import java . util . Date ; //引入类 class Student { //学生父类 String name ; //学生名称 Date date = new Date ( ) ; int hour = date . getHours ( ) ; //获得时间 public void goToSchol ( Student

抽象类实现多态

為{幸葍}努か 提交于 2020-01-25 05:22:47
抽象成员必须标记为abstract,并且不能有任何实现。 抽象成员必须在抽象类中。 抽象类不能被实例化。 子类继承抽象类后,必须把父类中的所有抽象成员重写。 抽象成员的访问修饰符不能是private。 抽象类是有构造函数的,虽然不能被实例化。 如果父类的抽象方法中有参数,那么继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。 如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候也必须要有返回值。 如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法重写。 如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义成抽象类 来源: CSDN 作者: Jeff~李嘉诚 链接: https://blog.csdn.net/weixin_44126152/article/details/104047495

Python 入门 16 —— 类的多态、 MRO列表、 super()函数

守給你的承諾、 提交于 2020-01-25 04:59:28
一、多态 当多个子类继承同一个父类时,在各个子类中都可以重载父类的成员。通过各自的重载,父类的某一成员在不同的子类中就会有不同的“表现”,这种现象就叫“多态”。例如: class b01 : x = 0 class cls01 ( b01 ) : x = 11 class cls02 ( b01 ) : x = 22 class cls03 ( b01 ) : x = 33 class cls04 ( b01 ) : x = 44 class cls05 ( b01 ) : x = 55 print ( cls01 . x , cls02 . x , cls03 . x , cls04 . x , cls05 . x ) # 11 22 33 44 55 以上例子中基类中定义的变量 x,当用不同的子类中,其值各不相同,这就是典型的“多态”现象。不过,以上例子展示的是最简单的多态形式。在实际的子类重载父类成员的过程上,通常都会引用父类的成员,即,父类已有的功能不再重复实现。 在派生类中引用基类成员可以有两种方法:一是用“基类名.成员名”的方法;二是用“super().成员名”的方法。用“基类名.成员名”的方法虽然简单明了,但潜在一个问题:当基类名发生改变时,子类就必须同时进行修改————逐一地在引用基类成员的地方将旧的基类名修改为新的基类名。而用“super().成员名

java中继承和多态的理解

浪子不回头ぞ 提交于 2020-01-24 23:59:55
继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: 类的继承格式 class 父类 { } class 子类 extends 父类 { } 首先我们探讨下为什么需要继承呢???? 首先继承通俗的白话文呢就是 就是把共有的是特征给提炼到出来 继承的特性 1.子类拥有父类非private的属性,方法 2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展 3.子类可以用自己的方式实现父类的方法 4.一个子类只能有一个父类 一个父类能有多个继承 继承关键字 继承可以使用extends和implements这俩个关键字来实现继承 而且所有的类都多是继承于java。lang.Object 当一个类没有继承得到俩个关键字,则默认继承object(这个类 java.lang 包中,所以不需要 import ) final关键字 不让其类再有子类 多态 就是普通方法 普通类 有一个方法名相同参数形式相同就能构成多态 来源: https://www.cnblogs.com/BaoWangZe/p/8991315.html

Python基础教程(第三版)读书笔记(7)

筅森魡賤 提交于 2020-01-24 17:07:02
文章目录 再谈抽象 对象魔法 多态 封装 继承 类 创建自定义类 私有属性 类的命名空间。 指定超类 深入探讨继承 多个超类 接口 抽象基类 模块abc,显式接口 小结 再谈抽象 这一章学习Python面向对象编程,学习对象、类、多态、封装、继承、接口和内省。 对象魔法 多态: 可对不同类型的对象执行相同的操作。 封装: 对外部隐藏有关对象工作原理的细节。 继承: 可基于通用类创建出专用类 多态 Python中多态用的地方超级多,也叫 鸭子模型 。我们一直用的‘+’就应用了多态。它的功能是将俩个对象相加,至于对象是什么类型。它并不在意,无论是数字还是字符串类型。它都可以使用。这就是多态。 >> > 1 + 1 2 >> > 'one' + 'one' 'oneone' 封装 封装就像用电视机,你按电源,电视打开。但是你不知道具体是怎么实现的。对于外部它是保密的,是密封的。python中的封装是需要将属性变成私有的。 继承 继承就像是子承父业,孩子不需要做什么就可以拥有和父亲一样多的东西。孩子还可以在父亲的基础上做出自己的东西。也可以把父亲的企业按照自己的意愿再修改。 类 类是一种抽象。一种概括,人细分的话有很多很多种人,但是特别的分的话只有男人和女人两种人。类就是这样, 概括 最重要的部分。而 具体 到每个个体,这个个体就是一个 对象 ,是男人类或者女人类的一个 实例

Java版八荣八耻

旧时模样 提交于 2020-01-24 08:39:07
以动手实践为荣,以只看不练为耻 以打印日志为荣,以出错不报为耻 以局部变量为荣,以全局变量为耻 以单元测试为荣,以手工测试为耻 以代码重用为荣,以复制粘贴为耻 以多态应用为荣,以分支判断为耻 以定义常量为荣,以魔法数字为耻 以总结思考为荣,以不求甚解为耻 多态应用: 动物–叫 鸟-叫—歌唱 狮子-叫–咆哮 猫-叫–喵喵喵 反思,项目里的抽象和继承往往需要花比较多的时间来思考,在真实业务场景中,要先完成实现,再做代码结构的优化,往往在完成了一大堆的ifelse之后,再来做这种层面的优化,工作量基本相当于再写一遍,做的人也比较少。 实例分析: Position ClosePosition ForwardPosition OpenPosition 这三个对象,从理论上来说是可以通过多态来做的,但在真实项目中就是采用了一个position,并使用不同的变量名来做区分, ifelse使用得非常之多。 现在来分析,重构该怎么做,会优化多少? 首先position提供公共的方法,由三个子类去实现,在service层只要将对象转为对应的子类就能完成。 很显然,代码会变成这样 Position p; if (A) p=new ClosePosition(); else if (B) p=new ForwardPosition(); p.add(trade); 优点:公共的代码可以放在父类的方法里