官方解释:
1.接口的多种不同的实现方式即为多态。
2.多态性是允许你将父类对象设置成为一个或更多的他的子对象相等的技术。
3.我们在程序中定义的引用变量所指向的具体类型和通过改引用变量的方法调用在编程的时候并不确定,相当于运行期间才确定。就是这个引用变量究竟指向那个一个实例化对象,在编译期间是不确定的,只有运行期间才确定。这样不用修改源码就可以把变量绑定到不同的实例类上,让程序拥有了多个运行状态,这就是多态。
what!!!这是啥,不懂。解释一下
意思就是:允许将子类类型的指针赋值给父类的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。比如你家亲戚结婚了,让你家派一个人去参加婚礼,邀请函写的是你爸的名字,但实际上是你去了,或者你的妹妹,这都可以,因为你们代表你爸,但是在你们去之前他们也不知道谁回去,只知道你们家有人去,可能是你们 的每一个成员其中的一个。这就是多态。
多态又分为 编译时多态和运行时多态。
编译时多态:比如重载。
运行时多态:比如重写。
多态的实现机制
术语的版本:
我们将引入java的静态分派和动态分派这个概念。
静态分派:所有依赖静态类型来定位方法执行版本的分派动作。动态分派发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的,而是由编译器来完成的。(编译时多态)
动态分派:在运行期根据实际类型确定方法执行版本的分派动作。(运行时多态)
简单版本:
父类或者接口定义的引用变量可以指向子类或者具体实现类的实例化对象,由于程序调用方法是在运行期才动态绑定的,那么引用变量所指向的具体实例化对象运行期才确定。所以这个对象的方法是运行期正在运行的这个对象的方法而不是变量的类型中定义的方法。