我是靠谱客的博主 独特鸵鸟,最近开发中收集的这篇文章主要介绍Java 和python多态区别_python面向对象之多态鸭子类型与Java的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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:

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

cd20e583167affc5193ae2f810eea1f8.png

duck没有implements Performs:

856b8fc47535b2117033f18a8658f192.png

924fe4cfc1a6d2fe5e4bf42e201527ca.png

3a0c6364611ae8c8159b736efc428133.png

2bb1349cb27bbea8968716ca2f9889f4.png

参考:

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

《Python语言及其应用》

a56770abf457f218b00e78793ef0ed1e.png

4a668feaa3018a2e1706f07e5002bcc8.png

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的比较的全部内容,希望文章能够帮你解决Java 和python多态区别_python面向对象之多态鸭子类型与Java的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部