Java静态多态性和动态多态性有何区别?

Python012

Java静态多态性和动态多态性有何区别?,第1张

静态多态性指的是程序在编译时,系统就能决定调用哪个函数,如重载。 \x0d\x0a动态多态性指在运行中才能动态确定操作指针所指的对象,主要通过虚函数和重写来实现。 \x0d\x0ajava 的多态机制遵循一个原则:当父类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法 \x0d\x0a概念理解起来有点抽象。还是看个例子吧。 \x0d\x0a静态多态性: \x0d\x0aadd(int a)\x0d\x0aadd(int a,int b)\x0d\x0aadd(double a)\x0d\x0aadd(double a,double b)\x0d\x0a\x0d\x0a动态多态性 \x0d\x0apublic class A{ } \x0d\x0a\x0d\x0apublic class AB extends A{ } \x0d\x0a\x0d\x0apublic class AC extends A{ } \x0d\x0a\x0d\x0apublic class test{ \x0d\x0a go(A a)

有一个比较经典的多态实例:

有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。

1、定义一种动物,该类型的动物有叫的属性。

2、分别定义猫,狗,鸟,都继承于该动物,都有叫的属性。

3、分别表示出各个具体小动物的叫声,例如猫的叫声:喵、狗的叫声:汪、鸟的叫声:咻,点是叫声,实现各个具体小动物用的叫声的方法是用的同一个函数名称,就是动物的叫声函数。

多态:

这个案例网上是没有的,属于无忌独创,当时在帮孩子辅导作业,小学科学,里面有一点内容是关于人的牙齿,说牙齿分为:门齿、犬齿、臼齿。

问闺女,为什么这么分呢?闺女说牙齿虽然都是用来咬食物,但是食物种类很多,咬碎需要的工具也不一样,门齿用来切割食物,如:苹果、梨;犬齿用来撕碎食物。

如肉类;臼齿用来磨碎食物,如犬齿撕碎的肉类,就需要再用臼齿来磨碎,然后送到食道,胃,小肠,大肠进行消化。我恍然大悟,这不就是Java面向对象里的多态吗?多完美啊。

这也很好说明了为什么会有多态出现,因为生活中就存在太多这种例子,所以需要多态来匹配解决。