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 ...
随机推荐
- 在Editplus中Dev C++配置C++的编译运行环境
1.首先得下载安装DEV-cpp 2.打开Editplus编辑器,工具->配置自定义工具 3.具体配置 编译C:命令:D:\Dev-Cpp\MinGW64\bin\g++.exe参数:" ...
- document.cookie = 'wcookie_date=' + wv + ';max-age=60'
js cookie生命周期
- Redis2.8配置文件详解(转)
add by zhj : 没找到本文的原文.另外,redis配置文件中文翻译 也翻译的不错,可以与本文对照看.两篇文章都是以Redis2.8来介绍的 在Redis中直接启动redis-server服务 ...
- 【我的Android进阶之旅】解决错误:No enum constant com.android.build.gradle.OptionalCompilationStep.FULL_APK
今天在分支编译代码并允许之后,接着同步主干代码之后,再继续点击[Run]按钮允许程序的时候报错了,错误描述日志如下所示: 一.错误描述 Error:(1, 1) A problem occurred ...
- struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本
[本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...
- Hadoop2.0中单点故障解决方案总结---老董
Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...
- [Python] Send emails to the recepients specified in Message["CC"]
Recently, I'm working on a small program which needs to send emails to specific accounts. When I wan ...
- day11 函数和命名空间
# def my_sum(*args):# sum_2=0# for i in args:# sum_2+=i# return sum_2### ret=my_sum(1,2,3,4)# print( ...
- s5_day1作业
#1.使用while循环输出1 2 3 4 5 6 8 9 10 # s=0 # while s<10: # s+=1 # if s==7: # continue # print(s) # fo ...
- 102. Binary Tree Level Order Traversal ------层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to righ ...