1.定义:是指一个对象可以有多种形态,换句话说多态使我们可以把一个子类对象看作是一个父类对象类型
(例:father A = new child() )。
多态指的是编译时的类型变化,而运行时类型不变。
2.多态分为两种:编译时多态和运行时多态。
编译时类型:定义时类型(主观概念)把它看作什么。
运行时类型:真实类型(客观概念) 实际上他是什么。
重载是编译时多态,覆盖是运行时多态。在方法重载的情况下,参数类型决定于编译时类型。
3.作用:在需要一类对象的共性时,可以很容易的抽取。并且可以屏蔽不同子类对象之间所不关心的差异。
多态方便写出更通用的代码,以适应需求的不断变化
4.多态常见的用法:
(1)、多态用在方法的参数上
(2)、多态用在方法的返回类型上
5.运行时多态的三原则:
(1)、对象不变(改变的是主观认识)
(2)、对于对象的调用只能限于编译时类型的方法。
(3)、在程序的运行时,动态类型判定。运行时调用运行时类型,即他调用覆盖后的方法。
注意:多态时,只有一般方法是动态调用的;而 static 方法和 final 方法依然是静态调用的;属性全是静态调用的。
如:father A = new child(); 则A的一般方法是child的方法;但A的属性是father的属性。
同样:child C = new child(); 则 (father)C 的一般方法还是child的方法,但属性是father的属性。
if(cat instanceof Animal){ ... } //如果cat属于Animal类型则执行
强制类型转换,在迫不得已的时候再用。因为很容易出错。 |
|