首页 > 代码库 > scjp考试准备 - 9
scjp考试准备 - 9
题目为如下代码的执行结果:
abstract class Vehicle{ public int speed(){ return 0; }}class Car extends Vehicle{ public int speed(){ return 60; }}class RacerCar extends Car{ public int speed(){ return 150; } public void run(){ System.out.println("I‘m running..."); }}public class Test{ public static void main(String[] args){ RacerCar racer = new RacerCar(); Car car = new RacerCar(); Vehicle vehicle = new RacerCar(); System.out.println(racer.speed() + ", " + car.speed() + ", " + vehicle.speed()); }}
分析下题目。题中考查的点是java的多态性。如题中的“Car car = new RacerCar(); ”一句,其中变量car在编译时类型是Car,在运行时类型是RacerCar。如这种情形,在运行时调用引用变量的方法时,其方法行为总是表现出子类方法的特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用相同的方法,呈现出不同的行为特征。这就是多态性。
需要注意的是,引用变量在编译时只能调用它编译时类型所具有的方法,而在执行时执行的是它的运行时类型的方法。如上面的代码中,如果让car变量执行run()方法,那么将会无法编译,因为编译时类型Car没有run()方法。尽管car变量所指向的对象确实有run()方法(反射时可见)。
看一下执行结果:
scjp考试准备 - 9
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。