Spec-Zone .ru
спецификации, руководства, описания, API
|
Когда Вы определяете новый интерфейс, Вы определяете новый тип справочных данных. Можно использовать имена интерфейса где угодно, можно использовать любое другое имя типа данных. Если Вы определяете ссылочную переменную, тип которой является интерфейсом, любой объект, который Вы присваиваете ему, должен быть экземпляром class, который реализует интерфейс.
Как пример, вот метод для того, чтобы найти самый большой объект в паре объектов для любых объектов, которые инстанцируют от class, который реализует 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
к a Relatable
введите, это может вызвать isLargerThan
метод.
Если Вы считаете обязательным для себя реализацию Relatable
в большом разнообразии классов объекты, которые инстанцируют от любого из тех классов, могут быть по сравнению с findLargest()
метод — при условии, что оба объекта имеют тот же самый class. Точно так же они могут все быть по сравнению со следующими методами:
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", независимо от того каково их наследование class. Когда они реализуют Relatable
, они могут иметь оба их собственных class (или суперкласс) тип и a Relatable
ввести. Это дает им некоторые из преимуществ множественного наследования, где у них может быть поведение и от суперкласса и от интерфейса.