java的多态可以用两种方式实现
一,继承
二,接口
如何理解?
首先我在这里先表达一种观念,java的对象有两个很重要的东西,一个叫做表象,一个叫做本质。
即引用和对象本身。
比如我们
A a=new A();
a那么这个时候,表象叫做A,本质也是A。
再比如,B是A的子类(我们在这规定字母序大的是字母序小的子类)
这个时候我们
A a=new B()
那么这个时候,a的表象是A,本质则是B。这个叫做向上转型,java认为B可以转为A。
或许你要问,为什么要讲这个呢?
实际上,要明白多态,了解表象和本质的区别是最重要的。
好了,知道了对象和本质之后,我们进入下一环节。
java处理多态,实际上是根据一个“表”,什么表呢?
假设父类有三个函数,分别叫做
A1(),A2(),A3();//分别打印A1,A2,A3
子类B
重写了
A1()函数。//打印B1
其余两个函数没有重写
当我们用多态的时候,如果在子类中重写了该函数(函数名,参数都完全一致),那么就会调用子类的方法代码,如果没有重写,那么就会用父类的函数。
也就是说,父类提供这样的表,java根据我们的表找函数实体。
例如我们A a1=new B();
于是当我们调用 a1.A1(),a1.A2(),则打印顺序是B1,A2.
现在我们总结一下,就是java首先根据你的表象,在你的表象提供的函数列表中找同名同参数的函数,然后根据这个函数指向的函数实体,在你的对象本质中找函数实体来执行。
而所谓接口,其实就是在你的表象提供的函数列表中额外提供一项函数。