java多态和python多态的区别
1440 2021-09-26 18:04
通过验证对比发现java的多态必须包裹在对象中才能调用,也就是说你必须给一个主人出来才能区分喂狗骨头和喂猫小鱼干。你要想得到一个图形的面积,必须先要定义一个图形类,然后让三角形或者正方形去继承,才能得到多态方法的不同行为。但是python不是这样,python直接传一个对象当参数给一个方法,外面不用套对象就能执行。直接定义一个面积方法然后传形状进去即可。
深入来从原理说、或者从原则上说:
java的多态是向上转型。
通俗版定义:
里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。 |
里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
Shape shp = new Circle();
shp.draw()
python的多态是不用考虑类的类型的,也就是说不用考虑父类的类型判定,只要你干了和他儿子一样的活,他就认你做儿子。
鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。
全部评论