接口铸造困境

时间:2017-11-14 16:58:45

标签: java interface casting

我对这个(可行的)简单的演员示例有一个尴尬的问题。你能帮我吗?

public class Example1 {

interface ParentIf{}
interface ChildIf extends ParentIf {}
interface OtherIf {}

class ParentCl {}
class ChildCl extends ParentCl {}
class OtherCl {}

    public static void main(String[] args) {
        ChildIf cI = null;
        ParentIf pI = null;
        OtherIf oI = null;
        ChildCl cC = null;
        ParentCl pC = null;
        OtherCl oC = null;

        cI = (ChildIf)oI; //case1 - fine

        cC = (ChildCl)oC; //case2 - inconvertible types

        cI = (ChildIf)oC; //case3 - fine
    }
}

但更尴尬的是,我不知道为什么其他两个陈述都没问题。

我看不到OtherIf和ChildIf之间的任何联系。那么当没有"扩展"时,如何将OtherIf强制转换为ChildIf?在case1?

中这两个接口之间

1 个答案:

答案 0 :(得分:2)

cI = (ChildIf)oI;

很好,因为oI可以是实现ChildIf和OtherIf的类的实例。

cI = (ChildIf)oC;

很好,因为oC可以是扩展OtherClass实现ChildIf的类的实例。