多态(polymorphism)

程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法在编程时并不确定,而在程序运行期间才确定。为了不用修改源程序代码,让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,在运行时绑定具体的代码,让程序可以选择多个运行状态。这就是多态性。

指向子类的父类引用由于向上转型,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类的某些方法,在调用该方法时,必定是使用子类中定义的方法(动态链接,动态调用)。

多态的实现

实现多态的三个必要条件:继承、重写、向上转型

继承:有继承关系的子类和父类 重写:子类对父类的某些方法重写定义,在调用时就调用子类的方法 向上转型:需要将子类的引用赋给父类,只有这样该引用才具备技能调用父类的方法和子类的方法。

原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

形式:继承和接口

PS:当子类重写父类的方法被调用时,只有对象继承链中**最末端**的方法才会被调用。

基于继承实现的多态:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

PS:在继承链中,对象方法的调用存在优先级:this.show(o),super.show(o),this.show((super)o),super.show((super)o)

参考链接

链接二

上述链接中有实例,并且讲解详细,好好学习!