多态的技术基础

使用动态绑定和重写机制来实现多态,我们首先需要掌握如下三个基础技术概念:
向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当作一个父类类型。
instanceof关键字:instanceof关键字用于判断运行时对象的真正类型。
动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性。
向上转型和向下转型
在第二章《Java语法基础》讲解基础数据类型的时候,我们已经看到了表达式中数值数据类型byte、short、int、long、float和double的相互转换规则,即:当从低精度数据类型向高精度数据类型转换时实行自动转换,这种类型转换技术称为向上转型;当从高精度数据类型向低精度数据类型转换时,需要使用强制类型转换符,这种类型转换技术称为向下转型。
对于引用数据类型,这种转换技术依然适用。在父类和子类的继承层次关系中,沿着子类向父类向上转型是自动转换,而从父类向子类必须使用强制类型转换才能实现向下转型。
使用instanceof关键字判断对象的真正类型
Java语言的多态机制导致了引用变量的声明类型和实际引用对象的类型可能不一致。为更准确鉴别一个对象的真正类型,Java语言引入了instanceof运算符。
动态绑定
在第七章《继承》的学习中,我们已经讨论了方法重写,即子类可以重写父类中的方法。一个被重写的方法在父类中实质上被隐藏,除非子类在重写的方法中使用super关键字,否则这个被重写的方法是不会被调用的。
在面向对象程序开发中,我们将一个方法调用与该方法所在的类关联起来,称为"绑定"。绑定分静态绑定和动态绑定,或者称为前期绑定和后期绑定。
所谓静态绑定,是指在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。针对Java简单的可以理解为程序编译期的绑定;这里特别说明一点,Java中的方法只有final、static、private和构造器是前期绑定。
所谓动态绑定,是指在运行时根据具体对象的类型进行绑定。Java中所有的普通方法,都采用动态绑定技术。通过动态绑定,JVM必须沿着继承层次树向下找,判断一个方法是否被重写。如果方法被重写了,在运行时就执行子类中的方法,而不是编译时调用的父类方法。

猜你喜欢

转载自blog.csdn.net/qq108455/article/details/92760582