Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python和java中继承之间的差异概述_Java_Python_Inheritance_Multiple Inheritance - Fatal编程技术网

python和java中继承之间的差异概述

python和java中继承之间的差异概述,java,python,inheritance,multiple-inheritance,Java,Python,Inheritance,Multiple Inheritance,我有java的背景,我正在学习python。我很快就需要使用继承了,我想找出每一种方法的关键区别是什么。我在网上查看了一下,发现了一些关于两者之间的差异以及需要注意的内容的信息,我发现python支持多重继承,但我想知道继承的其他任何特定差异。我不需要被告知语法(除非有什么我真的需要注意的),我已经看过了,我会接受的 我真的找不到我想要的东西,即差异概述和注意事项。Java有一个相当简单的继承模型:类必须有一个(并且只有一个)父类。虽然可以实现多个接口,但不能从多个父级继承,这可以看作是J

我有java的背景,我正在学习python。我很快就需要使用继承了,我想找出每一种方法的关键区别是什么。我在网上查看了一下,发现了一些关于两者之间的差异以及需要注意的内容的信息,我发现python支持多重继承,但我想知道继承的其他任何特定差异。我不需要被告知语法(除非有什么我真的需要注意的),我已经看过了,我会接受的




我真的找不到我想要的东西,即差异概述和注意事项。

Java有一个相当简单的继承模型:类必须有一个(并且只有一个)父类。虽然可以实现多个接口,但不能从多个父级继承,这可以看作是Java版本的“多重继承”

Java类中的大多数方法都是动态(后期)绑定的,父类中声明的
static
private
final
方法除外

正如您所指出的,在Python中,您可以从多个(或没有)父级继承。请注意,使用多重继承可以得到“.”您应该知道Python是如何解决这个问题的,以及在Python中引用父类时的含义(即:谁是您的爸爸?)

在Python中,所有内容都是动态绑定的,因为可以向实例添加成员,所以不能保证同一类的所有实例都具有相同的成员


最后,构造函数的重写方式略有不同:在Java中,子类必须调用父类的构造函数(精化重写),而在Python中,子类可以重写构造函数而不调用父类的构造函数(替换重写).

来自java背景时需要掌握的最重要的概念是,类继承是解决python问题很少需要的工具。这个想法的流行语是鸭子打字

大多数python程序都在访问和调用对象或其他对象上的属性。就像在java中一样,您可以通过赋予一个函数来获得有用的行为,该函数期望一个类型的对象是另一个更精细的类型的对象。为了在java中工作,替换对象必须继承预期的类型,或者实现预期的接口

在python中,这根本不是必需的;如果被替换对象具有您要传递给它的函数所期望的所有属性,那么它将正常工作

在python中实现继承的唯一原因是,超类确实真正地完成了新类型需要完成的几乎所有事情,并且只需添加一些额外的行为


最丰富的例子是python中的迭代器协议。任何对象都有一个方法
\uu iter\uu()
返回对象本身,还有一个方法
next()
返回任何内容,这是一个迭代器,可以显示为
for
语句
str
list
dict
file
和许多其他类型,它们没有什么共同点,只有全局
对象作为公共超类,每个都实现了迭代器协议。

请引用您已经找到的信息。作为数据点:虽然Python中可以实现多重继承,它不像是到处都在用,你需要注意的东西。否则,Java的继承模型相当简单——每个方法都是虚拟的,实例方法调用仅使用对象的运行时类型进行解析,而Python在使用等效结构时的行为是相同的。Python中的每个方法都是虚拟的吗?@Harpy:对于很多程序员来说,Java的多接口继承就是多重继承,甚至有一些OO语言没有“实现继承”的概念如果没有它,那就很好了。您可能混淆了“代码重用”和“继承”。我这里有一个300kloc的代码库,我们使用了0倍的抽象关键字,没有一个非final类。此外,我们到处都在使用多重继承,但这是Java,所以。。。正如你所看到的,“多重继承”可能意味着不同的东西。嗯,好吧,我只是用多重继承来表示java不支持的方式,因为这是我学到的术语@SyntaxT3rr0r:我明天会检查一些东西,以确保我清楚这2个,但如果时间太迟,那是因为现在还很早。我将使用它在pygtk中制作一些自定义小部件,我看到的所有示例都是gtk.Widget的子类,我将能够通过超类获得我需要的大部分东西。