1.多形性问题也叫做动态绑定,推迟绑定或者运行期绑定。
JAVA中所有的方法都采用后期绑定技术,除非一个方法已被声明为final类型(声明为final会告诉编译器不需要动态绑定,这样会生成更高效的代码)。
上溯造型可以用下面这个语句表现出来:
Shape s = new Circle();
在这里我们创建了一个Circle对象,并将结果句柄立即赋给Shape(应为继承关系,Circle是Shape的一种)。
当我们调用其中的一个方法:
s.draw();
大家或许会认为调用了Shape的draw方法,因为毕竟是一个Shape句柄。但此时调用的是Circle的draw方法,因为后期绑定已经介入。
有了java的动态绑定,才有其实现的工厂方法模式。对于这一点内容需要认真分析,我们平时看来理所当然的东西,其实是一动态绑定为基础的。
2.构建起调用顺序
java对象在调用构造方法:
1)调用基类,即父类的构造方法。这个步骤会不断重复下去,例如一个类Test2继承自Test1,Test1继承自Object,那么当Test2的构造方法执行时,会向上调用Test1的构造方法,Test1的构造方法继续向上调用Object的构造方法。
2)按声明顺序调用成员初始化模块
3)调用衍生构造器主题
3.类型检查
在java中所有造型都会自动得到检查,所以即使只是进行一次括弧造型,进入运行期后,仍回进行检查,以保证其是我们希望的造型。如果不是,就会得到一个ClassCastException(类造型违例)。在运行期对类型进行检查的行为叫做“运行期类型标识”(RTTI)。