python本身支持多态,即参数不用指定数据类型,所有多态在python中没有意义,因为python中多态都是这么写的:

class Foo1:

def f1(self):

pass

class Foo2:

def f1(self):

pass

class Foo3:

def f1(self):

pass

def func(arg):

arg.f1()

obj = Foo1() # obj= Foo2() obj = Foo3()

func(obj)

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子

class Duck():

def walk(self):

print('I walk like a duck')

def swim(self):

print('i swim like a duck')

class Person():

def walk(self):

print('this one walk like a duck')

def swim(self):

print('this man swim like a duck')

def LikeDuckWalkSwim(ducks):

ducks.walk()

ducks.swim()

duck1 = Duck()

person1 = Person()

LikeDuckWalkSwim(duck1)

LikeDuckWalkSwim(person1)

Python 对实现多态(polymorphism)要求得十分宽松,这意味着我们可以对不同对象调用

同名的操作,甚至不用管这些对象的类型是什么。\

而Java就不支持多态,Java需要指定参数对象类型,传参时arg可以是该指定的对象,也可以是该指定类任何子类的对象,所有在Java中使用就变得有意义了,因为要想传参,必须要继承该指定类或者传该类本身

python的继承与普通类:

class Quote():

def __init__(self, person, words):

self.person = person

self.words = words

def who(self):

return self.person

def says(self):

return self.words + '.'

class QuestionQuote(Quote):

def says(self):

return self.words + '?'

class ExclamationQuote(Quote):

def says(self):

return self.words + '!'

# te 类的后代)什么的没有任何关系:

这样的一个函数可以接受一个任意类型的对象,

并调用它的 “走” 和 “叫” 方法。如果这些需要被调用的方法不存在,

那么将引发一个运行时错误。任何拥有这样的正确的 “走” 和

“叫” 方法的对象都可被函数接受

class BabblingBrook():

def who(self):

return 'Brook'

def says(self):

return 'Babble'

hunter = Quote('Elmer Fudd', "I'm hunting wabbits")

# print(hunter.who(), 'says:', hunter.says())

hunted1 = QuestionQuote('Bugs Bunny', "What's up, doc")

# print(hunted1.who(), 'says:', hunted1.says())

hunted2 = ExclamationQuote('Daffy Duck', "It's rabbit season")

#book与hunters没有任何关系

brook = BabblingBrook()

def who_says(obj):

print(obj.who(), 'says', obj.says())

who_says(brook)

print(hunter.who(), 'says:', hunter.says())

who_says(hunter)

而如果是java:

就必须有继承关系,否则就会报错

duck没有implements Performs:

参考:

https://blog.csdn.net/bobozhengsir/article/details/20625727

《Python语言及其应用》

ROOOOOOM

发布了548 篇原创文章 · 获赞 135 · 访问量 15万+

他的留言板

关注

标签:says,python,self,who,多态,print,Java,class,def

来源: https://blog.csdn.net/qq_41228218/article/details/104073970

Java 和python多态区别_python面向对象之多态鸭子类型与Java的比较相关推荐

  1. python中的多态用法_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  2. python编程语言继承_Python 面向对象编程——继承和多态

    <基本定义> 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...

  3. python和java的区别-java和python的区别

    Java 和 Python 一直都是两种很火很强大的编程语言,那么他们的区别呢? 这里是我的一些总结,有些是参考别人的(在这里谢谢!!!) 区别:(推荐学习:Python视频教程) 1.Python比 ...

  4. python和java的区别-Java和Python的区别 学Python语言好还是Java好

    原标题:Java和Python的区别 学Python语言好还是Java好 相信不少想学编程的人都在纠结到底学Java好还是学Python,毕竟当下正是Python的火热时期,然而Java也同样占据编程 ...

  5. python鸭制作类代码_Python动态语言与鸭子类型详解

    今天来说说编程语言中的动态类型语言与鸭子类型. 动态语言 维基百科对动态语言的定义: 动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其 ...

  6. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  7. java与python难度对比_Python和Java的区别,看完这篇文章你就清楚啦

    众所周知,在数不清的编程语言中Java自诞生之日起长盛不衰,可谓是神话般的存在.随着人工智能时代的到来,Python迅速席卷全球,作为当下最热门的编程语言,因其简单实用且应用场景广泛备受青睐. 一个是 ...

  8. java与python的区别和作用_python与java用途区别有哪些

    展开全部 区别2113: 1.Python比Java简单,学习成本低,开发效率高.5261 2.Java运行效率高于Python,尤其是纯4102Python开发的程序,效率极低1653. 3.Jav ...

  9. python封装 继承 多态 举例_python面向对象中的封装、继承、多态

    封装 可以简单的理解为隐藏一切可以隐藏的实现细节,只向外界提供简单的编程接口.我们在类中定义的方法其实就是把数据和数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以 ...

  10. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

最新文章

  1. jQuery中的.height()、.innerHeight()和.outerHeight()
  2. Go 语言并发模型 Context
  3. JAVA实现单链表数据结构_java实现数据结构单链表示例(java单链表)
  4. SpringBoot阿里巴巴Fastjson的一些常用配置
  5. java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园
  6. AT2064-[AGC005F]Many Easy Problems【NTT】
  7. P3911-最小公倍数之和【莫比乌斯反演】
  8. [leetcod] Clone Graph
  9. Dev C++详细安装教程
  10. 平流式隔油池计算_隔油池计算方法及图集[参考提供]
  11. 如何将网格式报表打印成其它样式
  12. PostgreSQL的执行计划分析
  13. postman批量测试成功newman生成测试报告失败
  14. 程序分析技术栈-测试/辅助证明/模型检验/保守静态分析/bug-finding
  15. 苏宁大数据怎么运营_苏宁大数据离线任务开发调度平台实践
  16. 怎样使用手机的nfc功能模拟门禁?
  17. Artifact ssmbuildFinal:war exploded: Artifact is being deployed SSM整合
  18. 【leetcode-sql】1082-1084、1097
  19. 无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜
  20. 7-5 循环日程表 (10 分)

热门文章

  1. could not resolve xxx.jar
  2. UE4 相对坐标转世界坐标
  3. Error invoking sqlprovider method (tk.mybatis.mapper.provider.base.BaseselectProvider.dynamicSQL)解决
  4. [关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱
  5. ppt模板网站哪个好
  6. [QUANTAXIS量化分析]滚动复利策略
  7. 2019竞赛公开题库c语言,干货!全国电子设计大赛你必知的C语言知识
  8. 计算机c盘内存怎么转给d盘,C盘空间太大怎么把空间转到D盘或E盘
  9. Photoshop如何把图片转为RGB颜色模式
  10. 学计算机没有女朋友绕口令,十句以上绕口令