将子类转换为由SuperClass实现的SubInterface

时间:2016-06-02 10:35:09

标签: java inheritance casting

我的结构是这样的:

SubInterface instanceOfSubClass = (SubInterface) new SubClass ();

我想要做的是将SubClass转换为SubInterface

{{1}}

但是我得到了一个施法例外。

那么为什么我可以转换为SubInterface,即使它扩展了SuperInterface并且没有添加任何内容?它只是SuperInterface的一个包装器,由BaseClass实现

4 个答案:

答案 0 :(得分:3)

"子类"继承自实现SuperInterface的BaseClass

所以" SubClass"符合类型" BaseClass"和" SuperInterface"

你不能投射到" SubInterface"因为SubInterface是一个不同的类型。即使你没有添加任何函数并只使用ist作为包装器,它也是另一种类型

SuperInterface
    -BaseClass
        --SubClass
    -SubInterface

你可以看到,SubClass不在SubInterface的继承路径中

答案 1 :(得分:1)

您的层次结构看起来像那样

                      SuperInterface
                            |
         ---------------------------------------
         |                                     |
       SubInterface                            |
                                           BaseClass                
                                               |
                                               |
                                            SubClass 

正如您从此图表中看到的那样,SubClassSubInterface无关,因此您无法投放到SubInterface

答案 2 :(得分:1)

您收到例外,因为SubClass不是SubInterface。您的层次结构如下所示:

SuperInterface
   BaseClass
      SubClass

为了完成这项工作,BaseClass必须实施SubInterface。层次结构将如下所示:

SuperInterface
   SubInterface
      BaseClass
         SubClass

您可以将SubClass投射到SubInterface

答案 3 :(得分:0)

请参阅此处SubInterface& SubClass

所以,显然当你要把它投射给对方和/或亲子时,它会抛出ClassCastException

请参阅下图,以便清楚了解。

enter image description here