繁体   English   中英

scjp:类转换规则集

[英]scjp: class casting rules set

如果子类属于同一层次结构,我们可以将父类降级吗?

例如:

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;
 }
 }

在这里回答说,只有第12行被注释才能编译代码。 但是,只有在注释了第10行时,代码才会被编译。 请帮忙。

由于Building不是从Barn派生的,因此您将收到ClassCastException 每当您执行未经检查的下行转换时,都可能发生此异常。

由于Barn扩展了Building您需要将Barn的实例分配给build1

 Building build1 = new Barn();
 Barn barn2 = (Barn) build1;

如文档所述,抛出了类强制转换异常:

抛出该异常以指示代码已尝试将对象强制转换为不是实例的子类。

仅仅因为两个类处于同一类层次结构中,并不意味着我们可以自由地将其转换为层次结构中的任何类型。 我们向下转换的实例必须是我们向下转换的类型。 由于创建的实例的类型为Building ,因此在类型层次结构中的Barn上方设置了一个级别,因此无法将其强制转换为Barn

请看下面的例子

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
  }
}

谢谢你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM