题目为如下代码的执行结果:

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。如这种情形,在运行时调用引用变量的方法时,其方法行为总是表现出子类方法的特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用相同的方法,呈现出不同的行为特征。这就是多态性。

有两点需要注意:

1. 与成员方法不同的是,类的成员变量并不具备多态性;

2. 引用变量在编译时只能调用它编译时类型所具有的方法,而在执行时执行的是它的运行时类型的方法。如上面的代码中,如果让car变量执行run()方法,那么将会无法编译,因为编译时类型Car没有run()方法。尽管car变量所指向的对象确实有run()方法(反射时可见,或将car强制类型转换为RacerCar类后可见)。

看一下执行结果:

最新文章

  1. 淘宝网触屏版 - 学习笔记(1 - 关于meta)
  2. HDU 2058 The sum problem
  3. C++头文件,预处理详解
  4. C# CacheHepler Class
  5. xcopy拷贝判断是否成功 robocopy排除子目录
  6. 如何用SQL操作数据------告别标题党
  7. java安全性语言
  8. stm32开发之标准库的介绍
  9. linux清除全屏快捷键(Ctrl+L)
  10. CentOS DesktopEntry
  11. Django(五)母版继承、Cookie、视图装饰器等
  12. Sring 类的例子
  13. js动态添加未知新属性
  14. 使用ajax提交form表单,包括ajax文件上传【转载】
  15. linux命令学习之:sort
  16. Python2.7-itertools
  17. 给Spring的placeholder设置默认值
  18. TransitionsTest
  19. Git学习笔记——从一台电脑上传文件到Github上
  20. JS常见的几种数组去重方法

热门文章

  1. Debug技巧:条件断点和远程Debug
  2. ASP.Net请求处理机制初步探索之旅 - Part 2 核心(转)
  3. 第二课作业——redis常用命令
  4. django模板复用 extends,block,include
  5. requests 中response如何改变编码格式
  6. Hurst指数以及MF-DFA
  7. CKEditor的下载、配置与使用
  8. 基本数据类型(Day4)
  9. Wannafly交流赛1_B_硬币【数学】
  10. Rock-Paper-Scissors-Lizard-Spock Python实现