java实现鸭子类型_面向对象—多态、鸭子类型(Day21)
编程原则java具有自己的编程原则和设计模式,不能多继承。
python的编程原则:
1.开放封闭原则:开放是对扩展是开放的,封闭是对修改是封闭的(已经写完的代码程序是不能修改的)。
2.依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程
from abc importABCMeta,abstractmethodclass Payment(metaclass=ABCMeta): #创建一个规范,抽象类或接口类 metaclass指定的是一个元类
@abstractmethoddef pay(self):pass #加上装饰器pay变成抽象方法
classAlipay(Payment):defpay(self,money):print('使用支付宝支付了%s元' %money)classQQpay(Payment):defpay(self,money):print('使用QQ支付了%s元' %money)classWechatpay(Payment):deffuqian(self,money):print('使用微信支付了%s元' %money)defpay(obj,money):
obj.pay(money)
w=Wechatpay()
pay(w,100) #Can't instantiate abstract class Wechatpay with abstract methods pay
3.接口隔离原则:使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖那些不需要的接口。
接口python中没有接口,接口的概念是Java里来的,因为Java没有多继承,接口可以实现多继承。
借口类的作用:
1.在Java中能够满足接口隔离原则,且完成多继承的约束。
2.在python中,满足借口隔离原则,由于python本身支持多继承,所以就不需要接口这个概念了。
归一化设计:不管是哪个类的对象,都调用同一个函数去完成相似的功能。
classAlipay():defpay(self,money):print('使用支付宝支付了%s元' %money)classQQpay():defpay(self,money):print('使用QQ支付了%s元' %money)defpay(obj,money):obj.pay(money)
a=Alipay()
pay(a,100) #用pay这个函数来调用
抽象类和接口类的区别:
1.在python中没什么不同,都是用来约束子类中的方法,只要是抽象类和接口类中被abstractmethod装饰的方法,都需要被子类实现,
需要注意的是,当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束。
2.在Java中抽象类的本质是一个类,必须遵循单继承的规则,所以一个子类如果被抽象类约束,那么他只能被一个父类控制。
当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束。
编程语言分为:
1.强类型语言——Java c++ c# 必须在相同数据类型之间做运算。
2.弱类型语言——shell语言 不同数据类型之间可以运算 如:1+'1'。
3.结余强类型和弱类型之间的语言——python,动态强类型语言,相同数据类型之间做运算。
多态:由于java语言必须做相同数据类型之间的运算,只能通过继承父类将多个数据类型作为参数传入
java中在一个类(父类)之下发展出来的多个类的对象都可以作为参数传入一个函数或者方法。
python 天生自带多态效果(继承object类)。
class Payment:pass #定义一个父类,下面的多个类都继承父类,数据类型继承父类的传入。
classQQpay(Payment):defpay(self,money):print('使用qq支付了%s元' %money)classWechatpay(Payment):defpay(self,money):print('使用微信支付了%s元' %money)def recharge(self):pass
defpay(Payment pay_obj,int money):
pay_obj.pay(money)
qq_obj=QQpay()
qq_obj.pay(100)
pay(qq_obj,100)
鸭子类型
python崇尚鸭子类型,即看起来像,叫起来像,走起路来像鸭子,那么它就是鸭子。不通过具体的继承关系来约束这些类中必须有哪些方法名,是通过一种约定成俗的概念来保证在多个类中相似的功能叫相同的名字。
classQQpay():def pay(self,money): #看起来相同都叫pay
print('使用qq支付了%s元' %money)classWechatpay():defpay(self,money):print('使用微信支付了%s元' %money)defpay(pay_obj,money):
pay_obj.pay(money)
qq_obj=QQpay()
qq_obj.pay(100)
pay(qq_obj,100)
java实现鸭子类型_面向对象—多态、鸭子类型(Day21)相关推荐
- java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...
- java 类作为参数_如何将类类型作为函数参数传递
您正在以错误的方式接近它:在Swift中,与Objective-C不同,类具有特定类型,甚至具有继承层次结构(即,如果类 B 继承自 A ,则 B.Type 也继承自 A.Type ): class ...
- golang 获取struct类型_聊聊golang的类型断言
序 本文主要研究一下golang的类型断言 类型断言 x.(T) 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x为T类型 如果T类接口类型,则该断言x实现了T接口 实例1 func ma ...
- c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 基础数据类型介绍 例如以下这句话:"张三是一名程序员,今年15岁重50.3kg,他的代号是'A',他家的经纬度是(N30,E1 ...
- python 强类型 弱类型_强类型、弱类型
什么是强类型,什么是弱类型? 之前一直写的OC语言,在自己的意识中,所有数据类型是定义好的,如果改变数据的类型必须进行强制类型转换. 但是接触了JavaScript后发现,一个变量,可以是字符串,也可 ...
- python白鹅类型_关于python鸭子类型和白鹅类型
1,白鹅类型 白鹅类型对接口有明确定义,比如不可变序列(Sequence),需要实现__contains__,__iter__,__len__,__getitem__,__reversed__,ind ...
- java程序设计清考_面向对象程序设计(Java)-题库
<面向对象程序设计(Java)-题库>由会员分享,可在线阅读,更多相关<面向对象程序设计(Java)-题库(33页珍藏版)>请在金锄头文库上搜索. 1.面向对象程序设计 (ja ...
- java 对象的态_Java面向对象-------多态总结
1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...
- java多线程电梯调度_面向对象之多线程(可捎带电梯调度)
面向对象之多线程(可捎带电梯调度) 1. 题目重述 本题完成的任务为多部多线程可捎带调度电梯的模拟,电梯系统具有的功能为:上下行.开关门.新增一部可以使用的电梯,电梯系统在某一层开关门时间内可以上下 ...
最新文章
- 2018-1-8 Linux学习笔记
- 从零开始配置MySQL MMM
- OpenCV cv::Mat类
- 转:链表相交问题 详解
- android base64encoder 不存在
- mysql执行的list_CMD如何进入Mysql命令并执行相关查询
- caffe 图片数据的转换成lmdb和数据集均值(转)
- 利用Python定时给女友微信发送今日天气情况,异地恋维护感情神器
- 帐户当前被锁定,所以用户 sa 登录失败。系统管理员无法将该帐户解锁 解决方法...
- 华为超大云数据中心落地贵州,这些硬核技术有利支撑“东数西算”
- Java —— eclipse.zip
- 内含资源下载|久等了!阿里云技术天团15位专家总结双11实战经验
- Java常见加密方式
- C3P0 连接池时报 TimeoutException 的解决方法
- Typecho 免费仿书本的“简单书本“模板
- 被问离职原因时哪类原因最好不要说?
- uni-app升级APP,包含apk整包升级和wgt应用资源升级
- 如何在iPhone、iPad 和 iPod Touch 上关闭“查找我的网络”?
- IxChariot网络测试工具
- 7-30 念数字。输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
热门文章
- 《小王子》中的经典语录(中英文对照)
- 【系统】Win To GO制作
- Rancher Labs获2000万美元B轮融资, CEO 梁胜出任有容云联席CTO
- 二叉树转树(数据结构)(图解)
- 计算机网络:自顶向下方法读书笔记(四)
- python爬虫爬取王者荣耀官网全部英雄头像(源码分享)
- Mac OS X 10.8.3搭建Android工程源码的编译环境(解决找不到GCC、GIT、PYTHON的问题)...
- 多目标遗传算法及MATLAB代码
- 银联电子支付 php chinapay
- Android近期错误