我的结构是这样的:
SubInterface instanceOfSubClass = (SubInterface) new SubClass ();
我想要做的是将SubClass转换为SubInterface
{{1}}
但是我得到了一个施法例外。
那么为什么我可以转换为SubInterface,即使它扩展了SuperInterface并且没有添加任何内容?它只是SuperInterface的一个包装器,由BaseClass实现
答案 0 :(得分:3)
"子类"继承自实现SuperInterface的BaseClass
所以" SubClass"符合类型" BaseClass"和" SuperInterface"
你不能投射到" SubInterface"因为SubInterface是一个不同的类型。即使你没有添加任何函数并只使用ist作为包装器,它也是另一种类型
SuperInterface
-BaseClass
--SubClass
-SubInterface
你可以看到,SubClass不在SubInterface的继承路径中
答案 1 :(得分:1)
您的层次结构看起来像那样
SuperInterface | --------------------------------------- | | SubInterface | BaseClass | | SubClass
正如您从此图表中看到的那样,SubClass
与SubInterface
无关,因此您无法投放到SubInterface
答案 2 :(得分:1)
您收到例外,因为SubClass
不是SubInterface
。您的层次结构如下所示:
SuperInterface
BaseClass
SubClass
为了完成这项工作,BaseClass
必须实施SubInterface
。层次结构将如下所示:
SuperInterface
SubInterface
BaseClass
SubClass
您可以将SubClass
投射到SubInterface
。
答案 3 :(得分:0)