接口参考类型

时间:2020-07-22 18:12:13

标签: java oop interface

在学习接口引用类型时,我在玩耍,发现有些奇怪;下面的代码。如您所见,带有“ ibs.spaceOther();”的行使我感到困惑。

有人能指出我正确的方向吗?也许可以给我一个字或些其他内容供我使用Google?

// IBlockSignal.java
public interface IBlockSignal {
    public void denySignal();
}

// SpaceTechnology.java
public class SpaceTechnology implements IBlockSignal {
    @Override
    public void denySignal() {
        System.out.println("space-deny");
    }
    public void spaceOther(){
        System.out.println("space-other");
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        IBlockSignal ibs;
        ibs = new SpaceTechnology();
        ibs.denySignal();
        System.out.println(ibs.getClass());
        // ibs.spaceOther(); // <--- Throws exception. Why? It is of class "SpaceTechnology". And this class does define spaceOther()        
        ((SpaceTechnology) ibs).spaceOther();
    }
}


////////////////////////////////////////
// Output:
//
// space-deny
// class SpaceTechnology
// space-other

1 个答案:

答案 0 :(得分:1)

ibs.spaceOther()不会引发异常。它不会编译。

因为您使用的是接口引用,所以只能访问左侧类型的方法

https://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html

相关问题