java实现鸭子类型,Golang的interface及duck typing鸭子类型
Golang的interface及duck typing鸭子类型
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 意思就是: 一个东西究竟是不是鸭子,取决于它能不能满足鸭子的工作。
duck typing 多见于动态语言,例如PHP,Python等.
在静态语言中比较罕见,但是在go中duck typing处处都是duck typing.go的interface{}和duck typing密不可分.
原理说明
duck typing描述事物的外部行为而非内部结构
在面向对象的编程语言中,当某个地方(比如某个函数的参数)需要符合某个条件的变量(比如要求这个变量实现了某种方法)时,什么是判断这个变量是否“符合条件”的标准?
如果某种语言在这种情况下的标准是: 这个变量的类型是否实现了这个要求的方法(并不要求显式地声明),那么这种语言的类型系统就可以称为 duck typing
鸭子类型(英语:duck typing):
是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。
个人理解,谁调用谁实现,比如你要调用一个A函数,而A函数中接收参数的同时调用了参数中的B方法.这时候你就要传进去一个具有B方法名的一个对象.
代码案例
对比Python3的duck typing案例
#!/usr/local/bin/python3
# coding=utf8
# 使用的对象和方法
class PsyDuck(object):
def gaga(self):
print("这是可达鸭")
# 使用的对象和方法
class DoningdDuck(object):
def gaga(self):
print("这是唐老鸭")
# 被调用的函数
def duckSay(func):
return func.gaga()
# 限制调用方式
if __name__ != '__main__':
print("must __main__")
# 实例化对象
duck = PsyDuck()
person = DoningdDuck()
# 调用函数
duckSay(duck)
duckSay(person)
GoLang案例
package main
import "fmt"
//定义一个鸭子接口
//Go 接口是一组方法的集合,可以理解为抽象的类型。它提供了一种非侵入式的接口。任何类型,只要实现了该接口中方法集,那么就属于这个类型。
type Duck interface {
Gaga()
}
//假设现在有一个可达鸭类型
type PsyDuck struct{}
//可达鸭声明方法-满足鸭子会嘎嘎叫的特性
func (pd PsyDuck) Gaga() {
fmt.Println("this is PsyDuck")
}
//假设现在有一个唐老鸭类型
type DoningdDuck struct{}
//唐老鸭声明方法-满足鸭子会嘎嘎叫的特性
func (dd DoningdDuck) Gaga() {
fmt.Println("this is DoningdDuck")
}
//要调用的函数 - 负责执行鸭子能做的事情,注意这里的参数,有类型限制为Duck接口
func DuckSay(d Duck) {
d.Gaga()
}
func main() {
//提示开始打印
fmt.Println("duck typing")
//实例化对象
var pd PsyDuck//可达鸭类型
var dd DoningdDuck//唐老鸭类型
//调用方法
pd.Gaga()//因为可达鸭实现了所有鸭子的函数,所以可以这么用
dd.Gaga()因为唐老鸭实现了所有鸭子的函数,所以可以这么用
}
java实现鸭子类型,Golang的interface及duck typing鸭子类型相关推荐
- python鸭制作类代码_详解duck typing鸭子类型程序设计与Python的实现示例
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定. 这个概念的名字来源 ...
- Duck Typing (鸭子类型)详解
1. 通俗解释: 之所以叫鸭子类型,是因为对于一个object来讲,如果它长得像鸭子,走路像鸭子,颜色像鸭子,那么你就可以把他当成一只鸭子 2. 在object oriental 里面的定义: Duc ...
- duck typing java_编程语言中的鸭子类型 Duck Typing
来源 | https://segmentfault.com/a/1190000019607240 1.什么是鸭子类型(duck typing) 百度百科是这样解释的: 这是程序设计中的一种类型推断风格 ...
- 编程语言中的鸭子类型 Duck Typing
来源 | https://segmentfault.com/a/1190000019607240 1.什么是鸭子类型(duck typing) 百度百科是这样解释的: 这是程序设计中的一种类型推断风格 ...
- Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程
目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...
- 编程语言中的 DUCK TYPING|python、c++、java、go
如果一只动物走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只动物就可以被称为鸭子. 许多编程语言都支持 Duck Typing ,通常 Duck Typing 是动态编程语言用来实现多态的一种方 ...
- GoLang之interface底层系列二(类型断言)
文章目录 GoLang之interface底层系列二(类型断言) 1.抽象类型.具体类型 2.断言的作用类型与目标类型 3.空接口.(具体类型) 4.非空接口.(具体类型) 5.空接口.(非空接口) ...
- golang语言 []interface{}和interface{}
文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...
- Python笔记 · 鸭子类型 / Duck Typing
1. 问题的由来 我初次意识到鸭子类型的存在是在学习Sklearn时,在<Hands-On Machine Learing>一书的第二章,作者提供了一个自定义的Tansformer,使用自 ...
最新文章
- 安全***需要掌握的东西
- 17秋 软件工程 团队第五次作业 Alpha
- Java Annotations: Explored Explained--转载
- (12)高斯和均值模糊放到一起
- html text 默认选中,html - 如何在Shiny中默认选择verbatimTextOutput中的文本? - SO中文参考 - www.soinside.com...
- router-link标签学习
- 动态规划训练15 [Monkey and Banana HDU - 1069 ]
- 自动化C语言第一次月考试卷,计算机专业第一次月考.doc
- Linux PS 命令详解
- 集群资源分配_推荐一款MySQL日常运维和集群管理的自动化平台--Arkcontrol
- matlab两个曲线的名称怎么显示出来的,求MATLAB的高手,怎么把两张仿真曲线合并显示在一张图上?...
- Shell脚本编程之(一)Shell脚本简介
- [张国荣][21CD][1998-2002][APE+CUE][8.00G][115][sqhhj0622#HD2PT]
- 「面试必背」TCP,UDP,Socket,Http网络编程面试题(快收藏)
- 小技巧(7):WPS批量修改图片尺寸
- 魔方——一面两层之后的公式
- HCIA-Cloud Computing华为云计算IA认证笔记
- 推荐几款不错的企业网站,前端设计师寻求设计灵感!
- 倍福---Profinet主从通信
- URL 编码 - 从 %00 到 %ff
热门文章
- python数据处理框架_python 最快 web 框架 Sanci 快速入门
- linux远程windows执行cmd,Linux服务器远程连接window服务器并执行cmd命令
- mysql总结 博客园_mysql 总结
- java 获取oracle表结构_获取Oracle中所有表的列表?
- win7系统怎么查看主板信息
- cv2 imwrite中文路径_python3下使用cv2.imwrite存储带有中文路径图片的方法
- Showdoc使用——接口文档
- JAVA之private修饰成员方法默认是final型的?
- Springboot Mybatis使用PageHelper实现分页查询
- 三步教你解决Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx错误!!!!很简单