zoukankan      html  css  js  c++  java
  • scjp考试准备

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

    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; ”这一行。

  • 相关阅读:
    2 行为型模式之
    1 行为型模式之
    WinSCP无法连接 ubuntu 的解决方法
    command 'x86_64-linux-gnu-gcc' failed with exit status 1错误及解决方案
    Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel
    CentOS 7 安装、配置、使用 PostgreSQL 9.5及PostGIS2.2
    R实战之热点图(HeatMap)
    Windows下Eclipse连接hadoop
    Ubuntu下eclipse开发hadoop应用程序环境配置
    Hadoop集群环境搭建
  • 原文地址:https://www.cnblogs.com/amunote/p/3948039.html
Copyright © 2011-2022 走看看