首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scjp:类转换规则集

scjp:类转换规则集
EN

Stack Overflow用户
提问于 2014-02-22 19:34:06
回答 2查看 556关注 0票数 0

如果子类属于相同的层次结构,我们可以向下转换超类吗?

示例:

代码语言:javascript
复制
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; // line number 10
 Object obj1 = (Object) build1;
 //String str1 = (String) build1; // line number 12
 Building build2 = (Building) barn1;
 }
 }

Answer here声明只有第12行注释会使代码编译。但是,只有在注释了第10行的情况下,代码才会被编译。请帮帮忙。

EN

回答 2

Stack Overflow用户

发布于 2014-02-22 19:36:23

由于Building不是从Barn派生的,因此您将收到一个ClassCastException。当您执行未经检查的向下转换时,任何时候都可能出现此异常。

由于Barn扩展了Building,因此您需要将Barn的一个实例分配给build1

代码语言:javascript
复制
 Building build1 = new Barn();
 Barn barn2 = (Barn) build1;

正如文档所解释的那样,抛出了一个类类型转换异常:

抛出

以指示代码试图将对象强制转换为该对象不是其实例的子类。

仅仅因为两个类在相同的类层次结构中并不意味着我们可以自由地向下转换为层次结构中的任何类型。我们向下转换的实例必须是我们向下转换到的类型。由于创建的实例的类型为Building,该类型在类型层次结构中比Barn高一级,因此不能将其强制转换为Barn

票数 0
EN

Stack Overflow用户

发布于 2014-02-22 19:39:50

请参考以下示例

代码语言:javascript
复制
class SuperClass {
...
}

class SubClass extends SuperClass {
...

}

public class Program {
  public static void main(String[] args) {

// case 1: actual SuperClass object
    SuperClass p1 = new SuperClass(); 

// case 2: SubClass object is referred by a SuperClass reference 
    SuperClass p2 = new SubClass();   

    SubClass s1 = (SubClass)p1; //run time error
    SubClass s2 = (SubClass)p2; //OK
  }
}

谢谢,祝你好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21953705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档