Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Интерфейсы и Наследование
Раздел: Интерфейсы
Реализация Интерфейса
Домашняя страница > Изучение Языка Java > Интерфейсы и Наследование

Реализация Интерфейса

Чтобы объявить class, который реализует интерфейс, Вы включаете implements пункт в объявлении class. Ваш class может реализовать больше чем один интерфейс, таким образом, implements ключевое слово сопровождается списком разделенных запятой значений интерфейсов, реализованных class. Условно, implements пункт следует extends пункт, если есть тот.

Демонстрационный Интерфейс, Relatable

Рассмотрите интерфейс, который определяет, как сравнить размер объектов.

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.

Реализация Интерфейса Relatable

Вот 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.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Определение Интерфейса
Следующая страница: Используя Интерфейс как Тип