使用接口作为类型

时间:2010-12-14 22:26:02

标签: java

我一直在查看一些生产代码,我对使用接口作为类型(对象)的概念感到有点困惑

我看到了这个解释http://download.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html

以下是代码:

public Object findLargest(Object object1, Object object2) {
   Relatable obj1 = (Relatable)object1;
   Relatable obj2 = (Relatable)object2;
   if ( (obj1).isLargerThan(obj2) > 0)
      return object1;
   else 
      return object2;
}

Relatable是一个界面,我不明白它在哪里获得isLargerThan(obj2)函数调用的逻辑。

有人可以为我说清楚吗?

3 个答案:

答案 0 :(得分:8)

逻辑来自实现接口的类。这正是您无法直接实例化接口的原因,因为接口本身不包含任何实现。该语言确保传递给您的方法的对象是一个实现接口中方法的具体类。

答案 1 :(得分:2)

假设对象实际上是实现接口的类型;否则,你在施法时会得到ClassCastException

答案 2 :(得分:2)

虽然编译时类型obj1Relatable,但运行时类型是实现Relatable的一些具体类。实际调用的代码由该运行时类型定义。这称为dynamic dispatch