在学习接口引用类型时,我在玩耍,发现有些奇怪;下面的代码。如您所见,带有“ 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
答案 0 :(得分:1)
ibs.spaceOther()
不会引发异常。它不会编译。
因为您使用的是接口引用,所以只能访问左侧类型的方法
https://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html