scjp考试准备 - 10 - 类型转换
题目为如下代码的执行结果:
class Building{}
public class Barn extends Building{
public static void main(String[] args){
Building build1 = new Building();
Barn barn1 = new Barn();
Barn barn2 = (Barn)build1;
Object obj1 = (Object)build1;
String str1 = (String)build1;
Building build2 = (Building)barn1;
}
}
题目考试的点是引用类型的强制转换。引用类型的强制类型转换有以下需要注意的点:
1. 引用类型的转换只能在具有继承关系的两个类之间进行。如果两个类之间不具有继承关系则会在编译时报“不可类型转换”的错误。
2. 若将子类对象强制转为父类类型,那么被转换的子类型对象的编译时类型被转为父类型,但其运行时类型仍然是子类型。
3. 如果把要把父类型的变量转换为子类型,一般要求这个对象是子类型实例(编译时类型是父类型,运行时类型是子类型)。否则虽然编译时可以通过,但是在执行时会报出ClassCastException异常。
4. 对于3中的情形, 在强制类型转换前,使用instanceof运算符进行判断。instanceof运算的前一个操作数通常是一个引用类型变量,后一个操作数一般为一个类或接口,比如“barn1 instanceof Barn”。instanceof用于判断前面的对象是否是后面的类(或其子类、实现类)的实例。
5. 使用instanceof运算符需要注意一点,就是instanceof运算符前面的操作数的编译时类型要么与后面的类相同,要么具有继承关系,不然在编译时就会报“不可转换的类型”错误。
根据第一点,可知上面的这道题在编译时会报错。问题就出在“String str1 = (String)build1; ”这一行。
scjp考试准备 - 10 - 类型转换的更多相关文章
- scjp考试准备 - 11 - 类型转换2
题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta ext ...
- scjp考试准备 - 2 - 逻辑运算及类型转换
判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...
- 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考试准备 - 1 - 循环控制
判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...
- 喵哈哈村的魔法考试 Round #10 (Div.2) 题解
喵哈哈村与哗啦啦村的大战(一) 最大值就是全部+3,最小值就是全部-3,注意不能降为负数. #include<bits/stdc++.h> using namespace std; con ...
随机推荐
- Less-css基础扩展
//扩展Extend less的伪类,合并了选择器,放在与它引用匹配的选择器上 Use Method:以在study上扩展test的样式为例 .test{ color:#000000; font-si ...
- Go & SQLite on Windows
一般golang使用的sqlite驱动包都是github.com/mattn/go-sqlite3,但是官方并没有直接支持windows平台的编译,因为windows平台编译默认需要gcc支持 其实解 ...
- sql---如何把sql查询出来的结果当做另一个sql的条件查询,1、语句2、with as
'; -- table2 的 name 作为 table1的条件 select * from table1 where name in (select name from table2) --如果有多 ...
- java.lang.IllegalStateException: Queue full
其实异常说的很清楚 队列满了! ArrayBlockingQueue FIFO 的队列: ArrayBlockingQueue内部是通过一个Object数组和一个ReentrantLock实现的.同时 ...
- 9.Query on Embedded/Nested Documents-官方文档摘录
1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...
- macos没有任何来源怎么解决?
打开终端,输入如下命令即可: sudo spctl --master-disable
- python学习之路-第八天-文件IO、储存器模块
文件IO.储存器模块 文件IO 代码示例: # -*- coding:utf-8 -*- #! /usr/bin/python # filename:using_file.py poem = '''\ ...
- 10046 trace详解(2)--tkprof
10046或10053生成的文件格式比较乱,直接查看有一定的困难,ORACLE自带的一个格式化命令工具tkprof可以将生成的.trc文件进行格式化,具体用说如下: 一.直接输入tkprof不带任 ...
- beego——模板函数
beego 支持用户定义模板函数,但是必须在 beego.Run() 调用之前,设置如下: func hello(in string)(out string){ out = in + "wo ...