Согласно ORACLE doc:
Использование интерфейса в качестве типа Когда вы определяете новый интерфейс, вы определяете новый тип эталонных данных.Имена интерфейсов можно использовать везде, где вы можете использовать любое другое имя типа данных.Если вы определяете ссылочную переменную, тип которой является интерфейсом, любой объект, который вы ей назначаете, должен быть экземпляром класса, который реализует интерфейс.
В качестве примера, вот метод для поиска самого большого объекта впара объектов для любых объектов, которые создаются из класса, который реализует 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.Это дает им некоторые преимущества множественного наследования, когда они могут работать как с суперклассом, так и с интерфейсом.