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

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 - 多态的更多相关文章

  1. scjp考试准备 - 10 - 类型转换

    题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...

  2. scjp考试准备 - 7 - Java构造器

    题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...

  3. scjp考试准备 - 6 - 父类构造器的引用

    题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...

  4. scjp考试准备 - 5 - 重载和重写

    如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public ...

  5. scjp考试准备 - 4 - 关于数组

    好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1 ...

  6. scjp考试准备 - 3 - 关于Arrays

    判断如下程序的最终输出值: import java.util.*; public class Quest{ public static void main(String[] args){ String ...

  7. scjp考试准备 - 2 - 逻辑运算及类型转换

    判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...

  8. scjp考试准备 - 1 - 循环控制

    判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...

  9. scjp考试准备 - 11 - 类型转换2

    题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta ext ...

随机推荐

  1. Hessian接口测试

  2. GO语言中使用OpenCV

    GO语言中使用OpenCV - OpenCV China :图像处理,计算机视觉库,Image Processing, Computer Vision http://wiki.opencv.org.c ...

  3. Powered by Flink

    Apache Flink: Powered by Flink https://flink.apache.org/poweredby.html Powered by Flink Apache Flink ...

  4. type属性对jq-post在ie、chrome、ff的兼容

    w http://stackoverflow.com/questions/8834635/post-not-working-in-firefox

  5. 利用python实现TCP和UDP服务器

    利用python的socket模块可以实现基本的网络编程,并且只限于一对一的连接.当然,也可以在其基础上实现一个网络服务器,但由于太底层这种做法不被推荐.其实如果要实现一个网络服务器很简单,调用pyt ...

  6. smart git使用+单人开发一般流程

    单人开发一般流程 clone checkout develop start gitflow start feature 写代码... 选中文件stage(相当于add) commit push fea ...

  7. swift 值得学习的项目

    http://www.php100.com/html/it/biancheng/2015/0112/8329.html

  8. SAP 后台job

    SAP 如何定义后台job 有两种方 1是se38执行可执行程序后,菜单栏‘程序’--->'后台执行',输入输出设备,ENTER两次后,选择开始时间(立刻执行,或定义日期时间,也可周期执行..) ...

  9. flask实现获取表单并执行shell

    1.一个HTML form input和一个button提供给用户输入 2.使用flask的request获取用户输入的文件名 3.判断输入异常 4.执行shell命令touch aa.txt 并返回 ...

  10. 深入ff and ffbase

    用ff 包读取一个csv 文件 >options(fftempdir = [二进制文件存放的位置]) >file_chunks <- read.csv.ffdf(file=”big_ ...