scjp考试准备 - 11 - 类型转换2
题目如下:
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的更多相关文章
- scjp考试准备 - 10 - 类型转换
题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...
- scjp考试准备 - 2 - 逻辑运算及类型转换
判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...
- scjp考试准备 - 6 - 父类构造器的引用
题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- 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考试准备 - 1 - 循环控制
判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...
- 喵哈哈村的魔法考试 Round #11 (Div.2) 题解
喵哈哈村的星星与月亮(一) 打表发现答案就等于a*b%mod 注意a*b可能爆longlong #include<bits/stdc++.h> using namespace std; c ...
随机推荐
- Centos7.0安装python2.7后yum报错
yum报错: vi /usr/libexec/urlgrabber-ext-down 把头部的Python改成和/usr/bin/yum中一样的
- java.lang.IllegalStateException: Queue full
其实异常说的很清楚 队列满了! ArrayBlockingQueue FIFO 的队列: ArrayBlockingQueue内部是通过一个Object数组和一个ReentrantLock实现的.同时 ...
- 支付宝SDK的使用方法
前奏 现在随着移动开发的快速发展,越来越多的应用要求在线支付功能.最近做了一个关于支付宝支付功能的应用,在使用支付宝的过程中,遇到一些不必要的弯路,因此,写了这篇文章总结一下关于ios开发如何使用支付 ...
- Taylor series
w用有限来表达无限,由已知到未知,化未知为已知. https://en.wikipedia.org/wiki/Taylor_series The Greek philosopher Zeno cons ...
- MyBatis 之动态SQL
1. 概述 动态 SQL 极大的简化了我们拼装SQL的操作; MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作: if choose(when,otherwise) trim(wher ...
- Extracts
@1:四层和七层负载均衡的区别:所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器.以常见的TCP为例,负载均衡设备在接收到第一个 ...
- 表单向controller传值如果没填controller取到的是null
jsp前端表单,向controller传数据,如果没有值,后台传入的是null,比如checkbox未选中,后台设置的Integer[] ids,接收到的ids=null,hidden标签如果没有值, ...
- PL/SQL编程—变量
SQL> declare c_tax_rate ,):=0.03; v_name ); v_passwd ); v_sale ,); v_tax_sale ,); begin select na ...
- centos7 上搭建私有云
OwnCloud环境搭建 一. 环境搭建 1. 环境需求 服务器操作系统:Centos7.0 外网服务器操作系统:Centos7.0 Php版本号:5.4.16 Mysql版本号:5.5.52 Apa ...
- Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法
最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders ...