Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы объявить class, который реализует интерфейс, Вы включаете implements
пункт в объявлении class. Ваш class может реализовать больше чем один интерфейс, таким образом, implements
ключевое слово сопровождается списком разделенных запятой значений интерфейсов, реализованных class. Условно, implements
пункт следует extends
пункт, если есть тот.
Рассмотрите интерфейс, который определяет, как сравнить размер объектов.
public interface Relatable { // this (object calling isLargerThan) // and other must be instances of // the same class returns 1, 0, -1 // if this is greater // than, equal // to, or less than other public int isLargerThan(Relatable other); }
Если Вы хотите быть в состоянии сравнить размер подобных объектов, независимо от того каковы они, class, который инстанцирует их, должен реализовать Relatable
.
Любой class может реализовать Relatable
если есть некоторый способ сравнить относительный "размер" объектов, которые инстанцируют от class. Для строк это могло быть число символов; для книг это могло быть число страниц; для студентов это мог быть вес; и т.д. Для планарных геометрических объектов областью был бы хороший выбор (см. RectanglePlus
class, который следует), в то время как объем работал бы на трехмерные геометрические объекты. Все такие классы могут реализовать isLargerThan()
метод.
Если Вы знаете, что class реализует Relatable
, тогда Вы знаете, что можно сравнить размер объектов, которые инстанцируют от того class.
Вот Rectangle
class, который был представлен в разделе Объектов Создания, переписанном, чтобы реализовать Relatable
.
public class RectanglePlus implements Relatable { public int width = 0; public int height = 0; public Point origin; // four constructors public RectanglePlus() { origin = new Point(0, 0); } public RectanglePlus(Point p) { origin = p; } public RectanglePlus(int w, int h) { origin = new Point(0, 0); width = w; height = h; } public RectanglePlus(Point p, int w, int h) { origin = p; width = w; height = h; } // a method for moving the rectangle public void move(int x, int y) { origin.x = x; origin.y = y; } // a method for computing // the area of the rectangle public int getArea() { return width * height; } // a method required to implement // the Relatable interface public int isLargerThan(Relatable other) { RectanglePlus otherRect = (RectanglePlus)other; if (this.getArea() < otherRect.getArea()) return -1; else if (this.getArea() > otherRect.getArea()) return 1; else return 0; } }
Поскольку RectanglePlus
реализации Relatable
, размер любых двух RectanglePlus
объекты могут быть сравнены.
isLargerThan
метод, как определено в Relatable
интерфейс, берет объект типа Relatable
. Строка кода, показанного полужирным в предыдущем примере, бросках other
к a RectanglePlus
экземпляр. Преобразование типа говорит компилятор, каков объект действительно. Вызов getArea
непосредственно на other
экземпляр (other.getArea()
) был бы не в состоянии скомпилировать, потому что компилятор не понимает это other
фактически экземпляр RectanglePlus
.