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

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 - 类型转换的更多相关文章

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

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

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

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

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

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

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

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

  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 #10 (Div.2) 题解

    喵哈哈村与哗啦啦村的大战(一) 最大值就是全部+3,最小值就是全部-3,注意不能降为负数. #include<bits/stdc++.h> using namespace std; con ...

随机推荐

  1. 理解java集合——集合框架 Collection、Map

    1.概述: @white Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中. 2.Java集合大致可以分4类: @white Set ...

  2. Flutter入门之有状态组件

    StatefulComponent使用方法入门 在上一篇Flutter入门之无状态组件中我们讲到了无状态组件,所谓的无状态组件指的就是其内部的状态是来自其父组件并使用final类型的变量来存储,当组件 ...

  3. ZOJ 3490 String Successor(模拟)

    Time Limit: 2 Seconds Memory Limit: 65536 KB The successor to a string can be calculated by applying ...

  4. jquery点击div以外的区域触发事件

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. Java 之 GUI 编程

    GUI (Graphical User Interface, 图形用户接口) CLI (Command line User Interface, 命令行用户接口) Java 为 GUI 提供的对象都存 ...

  6. socketserver模块、MySQL(数据库、数据表的操作)

    一.socketserver实现并发 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环. socketserver模块中分两大类:server类(解决链接问题)和request类(解决 ...

  7. 吴超老师课程--Sqoop的安装和介绍

    SQOOP是用于对数据进行导入导出的.    (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中    (2)把HDFS.Hive.HBase中的数据导出到MySQ ...

  8. Linux用户、群组及权限

    由于对文件的操作需要切换到相应文件夹下进行,所以对文件内容的修改,最基本的是需要其文件夹执行的权限. 文件夹的读权限(read)可以独立行使,但是对文件夹内容的写权限(对其内文件的新建.删除.重命名) ...

  9. Android 6.0 Kotlin 蓝牙扫描

    package com.arci.myapplication import android.app.Activityimport android.os.Bundleimport android.sup ...

  10. Web层辅助工具类

    Java web开发中经常用到的一些方法: import java.io.BufferedReader; import java.net.InetAddress; import java.net.Un ...