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 ...
随机推荐
- mvel
https://en.wikipedia.org/wiki/MVEL import java.util.*; // the main quicksort algorithm def quicksort ...
- Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?
/*! Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; ...
- 分别用request和socket给百多发送请求
1.方式1 import socket client = socket.socket() # 百度创建连接: 阻塞 client.connect(('www.baidu.com',80)) # 问百度 ...
- 【我的Android进阶之旅】如何去除ListView中Header View、Footer View中的分割线
最近的项目中给ListView 加入了一个Header View之后,发现Header View的下方也有了分割线,很难看,UI要求将Header View的分割器去掉,好吧.现在就来说一说如何如何去 ...
- oracle Dba之路
如何快速的成为一个合格的 DBA? 2010年11月03日 11:25:00 阅读数:584 原文来自:http://topic.csdn.net/u/20101031/21/A78B2EA1-6F2 ...
- centos安装桌面和远程连接
centos安装桌面 安装 MATE 桌面环境为例: 登录服务器,执行命令 yum groups install "X Window System" 安装 X Window Sys ...
- C语言高级宏技巧
特殊符号#.## (1)# When you put a # before an argument in a preprocessor macro, the preprocessor turns t ...
- PHP基础学习代码案例
<?php print 'hello world ! '; echo '<br/>'; ?> <?php $number="16"; $number2 ...
- Appium做Android功能自动化测试
前言 做Android端功能自动化已有2年多的时间了,使用过的功能自动化框架有Robotium.Uiautomator.Appium.最近研究自动化case复用的方案,调研了Appium的自动化框架, ...
- django-admin自定义登录
这个效果,单位代码是User model 的一个外键Company 通过修改form,然后在前端显示 修改form class AuthenticationForm(forms.Form): &quo ...