Java 将接口用作类型

Java 将接口用作类型,java,Java,我一直在浏览一些生产代码,对于将接口用作类型(对象)的概念我有点困惑 我看到了这个解释 下面是代码: public Object findLargest(Object object1, Object object2) { Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if ( (obj1).isLargerThan(obj2) > 0) return obje

我一直在浏览一些生产代码,对于将接口用作类型(对象)的概念我有点困惑

我看到了这个解释

下面是代码:

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)
函数调用的逻辑


有人能给我讲清楚吗?

假设对象实际上是实现接口的类型;否则,在强制转换时会得到一个
ClassCastException

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

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

你知道如果对象没有实现接口会发生什么吗?@Albinoswordfish在(Relatable)object1处会有一个ClassCastException;它引发异常:您可以使用
instanceof
运算符在引发异常之前检查有效的强制转换。它将引发ClassCastException。