Java多态和Python鸭子类型的区别,方便理解Python鸭子类型
Java多态代码:
public class Mymain{
public static void main(String[] args) {
Animal dog=new Dog(); //父类的引用指向子类的实例 向上转型
dog.eat(); //调用重写父类抽象方法的子类方法 输出 吃骨头
//dog.sound(); 无法调用子类的独有方法
Dog d=(Dog)dog; //向下转型
d.sound(); //调用Dog的方法 输出 汪汪汪
}
}
abstract class Animal{
abstract void eat();
}
class Dog extends Animal{
public void eat(){
System.out.println("吃骨头");
}
public void sound(){
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("吃鱼");
}
public void sound(){
System.out.println("喵喵喵");
}
}
通过上面的代码可以看出java中对每一个对象的识别都非常的严谨,子类的独有方法都是被保护的。鸭子类型:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”。
下面看一看Python的鸭子类型的代码:
class Cat:
def eat(self):
print("I am a Cat")
class Dog:
def eat(self):
print("I am a Dog")
class Duck:
def eat(self):
print("I am a Duck")
Animal_List=[Cat, Dog, Duck]
for item in Cla_List:
item().say() #鸭子类型的语法 类对象().方法()
#输出结果
# I am a Cat
# I am a Dog
# I am a Duck
在Python中传入的对象不会被严格的识别,只要存在可调用的方法,就会直接执行