# 使用接口作为类型

> 原文： [https://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html](https://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html)

定义新接口时，您将定义新的参考数据类型。您可以在任何可以使用任何其他数据类型名称的地方使用接口名称。如果定义一个类型为接口的引用变量，则为其分配的任何对象 _ 必须 _ 是实现该接口的类的实例。

作为示例，这里是一种用于查找一对对象中的最大对象的方法，对于 _ 从实现`Relatable`的类实例化的任何 _ 对象：

```
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;
}

```

通过将`object1`转换为`Relatable`类型，它可以调用`isLargerThan`方法。

如果您在各种类中实现`Relatable`，那么可以将从 _ 实例化的那些类的任何 _ 的对象与`findLargest()`方法进行比较 - 前提是两个对象属于同一类。同样，它们都可以与以下方法进行比较：

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

public boolean isEqual(Object object1, Object object2) {
   Relatable obj1 = (Relatable)object1;
   Relatable obj2 = (Relatable)object2;
   if ( (obj1).isLargerThan(obj2) == 0)
      return true;
   else 
      return false;
}

```

这些方法适用于任何“可关联”对象，无论它们的类继承是什么。当它们实现`Relatable`时，它们可以是它们自己的类（或超类）类型和`Relatable`类型。这为他们提供了多重继承的一些优点，他们可以从超类和接口获得行为。