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。如这种情形,在运行时调用引用变量的方法时,其方法行为总是表现出子类方法的特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用相同的方法,呈现出不同的行为特征。这就是多态性。
有两点需要注意:
1. 与成员方法不同的是,类的成员变量并不具备多态性;
2. 引用变量在编译时只能调用它编译时类型所具有的方法,而在执行时执行的是它的运行时类型的方法。如上面的代码中,如果让car变量执行run()方法,那么将会无法编译,因为编译时类型Car没有run()方法。尽管car变量所指向的对象确实有run()方法(反射时可见,或将car强制类型转换为RacerCar类后可见)。
看一下执行结果:

scjp考试准备 - 9 - 多态的更多相关文章
- scjp考试准备 - 10 - 类型转换
题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- scjp考试准备 - 6 - 父类构造器的引用
题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...
- scjp考试准备 - 5 - 重载和重写
如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public ...
- scjp考试准备 - 4 - 关于数组
好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1 ...
- scjp考试准备 - 3 - 关于Arrays
判断如下程序的最终输出值: import java.util.*; public class Quest{ public static void main(String[] args){ String ...
- scjp考试准备 - 2 - 逻辑运算及类型转换
判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...
- scjp考试准备 - 1 - 循环控制
判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...
- scjp考试准备 - 11 - 类型转换2
题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta ext ...
随机推荐
- 我的Android进阶之旅------>解决:Failed to create 'build\outputs\apk\watch-debug-unaligned.apks': 拒绝访问。
1. 错误描述 今天用Android Studio进行项目编译的时候,报错如下所示: FAILURE: Build failed with an exception. * What went wron ...
- Linux上free命令的输出及其他
一.明确概念 A buffer is something that has yet to be "written" to disk. A cache is something t ...
- centos7 重启网卡失败
今天在centOS 7 network服务重启不了 现把各种解决方法归纳整理,希望能让后面的同学少走点歪路... 首先看问题:执行service network restart命令后出现下面的错误: ...
- 七牛云 如何配置域名的 CNAME
CNAME 简介 CNAME 即指别名记录,也被称为规范名字.这种记录允你将多个名字映射到同一台计算机. 当需要将域名指向另一个域名,再由另一个域名提供 ip地址,就需要添加 CNAME 记录. 为什 ...
- exp导出一个表中符合查询条件的数据
原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...
- Java并发—java.util.concurrent.locks包
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当 ...
- 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图
用仿ActionScript的语法来编写html5——第五篇,Graphics绘图 canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个G ...
- delphi WebBrowser获取iframe页面内容及操作
uses MSHTML, ActiveX; function GetFrame(FrameNo:Integer):IWebbrowser2;var OleContainer:IOleContainer ...
- 450. Delete Node in a BST
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...
- iOS 多线程安全 与 可变字典
这周最大的收获是稍稍通透了 多线程安全字典的重要性. 诱因是,发现了有字典坏地址错误 果断以为是 value 或者 key 是可能出现了空值,补充了潜在的判断,虽然有的位置已经预判断的,但 ...