题目如下:

interface Foo{}
class Alpha implements Foo{}
class Beta extends Alpha{}
public class Delta extends Beta{
public static void main(String[] args){
Beta x = new Beta();
//insert code here
}
} 将下面哪一行代码插入如上所示的位置中会导致java.lang.ClassCastException:
A. Alpha a = x;
B. Foo f = (Delta)x;
C. Foo f = (Alpha)x;
D. Beta b = (Beta)(Alpha)x;

java.lang.ClassCastException是指类型转换异常。一般发生在强制类型转换时,若对象真正的实例类型小于转换后的类型,在运行时就会产生ClassCastException。

在这道题中x是一个Beta实例,这是编译时就决定了的。所以x可以在Foo、Alpha、Beta等同级或低级类型中随意转换。但是他不能转为Delta类,因为它不具备Delta类的行为特征。

在这里神展开了下:代码世界其实是比较严格的,一级级的继承形成了一种金字塔式的结构。底层是最原始的超类或接口,只有最基本的技能,顶层则吸收了向下每一层的技能还演化出了自己独有的技能。当一个对象生于金字塔的某一级以后,一般只能在出生的这一级或较低的级别生存。即使它换了一个伪装,虽可以瞒过一时,但是真的工作时就必然会因为技能不足而露出马脚。不过也有些真正的超级对象,它们虽然天然高贵,但是因为生于较低等级,平时只能做这个等级或较低等级允许做的事情。可是当需要时,它们也会穿上红色内裤,披上斗篷,完成高等级才能完成的事情。

class Man{
public int age = 100;
public void move(){
System.out.println("I'm running...");
}
} class Superman extends Man{
public int age = 10000;
public void move(){
System.out.println("I'm flying...");
}
} public class Test{ public static void main(String[] args){
Man clark = new Superman(); System.out.println(clark.age);
clark.move();
} }

执行结果:

scjp考试准备 - 11 - 类型转换2的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 喵哈哈村的魔法考试 Round #11 (Div.2) 题解

    喵哈哈村的星星与月亮(一) 打表发现答案就等于a*b%mod 注意a*b可能爆longlong #include<bits/stdc++.h> using namespace std; c ...

随机推荐

  1. IO流入门-第五章-FileWriter

    FileWriter基本用法和方法示例 /* java.io.Writer java.io.OutputStreamWriter 转换流(字节输出流--->字符输出流) java.io.File ...

  2. SOE不能进入断点调试

    一.前言 任何程序开发,如果不能进入断点调试,是非常的痛苦的. 如果有过SOE开发经验的人都知道,SOE开发过程中调试是非常麻烦的.任何在SOE开发模板中的修改都需要重新编译工程,重新生成.soe 文 ...

  3. Redis配置文件的使用

    Redis基本配置 常规配置 进到配置文件下 vi /etc/redis.conf 写入配置项 port 1111 # 配置端口号 daemonize yes # 是否后台运行 daemonize y ...

  4. Linux内核学习资料

    1.为什么计算机的学生要学习Linux开源技术 http://tinylab.org/why-computer-students-learn-linux-open-source-technologie ...

  5. Thinkphp的list_to_tree 实现无限级分类列出全部节点

    list_to_tree 使用起来十分方便,具体可查看手冊.由于我在用的时候须要同一时候列出全部节点,所以写了一个递归函数,拿出来供大家參考. public function index(){ Loa ...

  6. 001-docker概述、架构、window安装、基本测试

    一.概述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流 ...

  7. 基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询

    基于对象的跨表查询 一对多查询(班级表和学生表) 表结构创建 class Class(models.Model): id = models.AutoField(primary_key=True) cn ...

  8. django联合查询

    假设A表的主键aid作为B表的外键,A表有属性name,那么想查询B表中name为abc的元素就可以这样写: B.objects.all().filter(aid__name = 'abc') __真 ...

  9. dobbo 简单框架

  10. Spring 知识点总结

    一.Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Sprin ...