Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Implements 
:(
    Опции темы
soulcub
Дата 26.9.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: нет
Всего: 2



Прошу прощения, если вопрос покажется детским, но всё же..

Пытался разобраться в Implements, в чём его прелесть? Читал теорию, но без практики никуда. Ни фига не понял... Может мне кто-то показать на примере кошерность Implements, например в сравнении с Extends.. Когда его лучше использовать и что это даёт? Спасибо..
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
x8m6
Дата 26.9.2010, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



Это дает возможность альтернативного множественного наследования, т.е. можно сделать implements сразу от нескольких интерфейсов. Но расширять (extends) можно только  один класс. implements дает возможность находить  что то общее у классов находящихся на разных ветвях в иерархии наследования.   
PM MAIL   Вверх
nc30
Дата 26.9.2010, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Интерфейсы

Реализация интерфейсов (implementation) - это (IMHO) одна из самых мощных и гибких особенностей Java. Красивое и изящное решение, позволяющее объекту класса выступать в совершенно не связанных между собой ипостасях. При этом соблюдается стройность идеологии языка Java касательно наследования: у класса может быть только один родитель.

Приведу небольшой пример.
Есть класс Person, который описывает некую персону, у которой есть фамилия, имя и отчество.

По условиям задачи система будет работать с некоторым списком объектов Person, при этом было бы неплохо сортировать объекты по Ф.И.О. Один из вариантов - реализация интерфейса Comparable. Для этого надо переопределить (а точнее, определить) метод compareTo() данного интерфейса.
Код

public class Person implements Comparable {
    private String surName;
    private String firstName;
    private String patronymic;

    // seters/geters

    @Override
    public String toString () {
        return surName + " " + firstName + " " + patronymic;
    }

    public int compareTo(Object obj) {
        return c.compare(this.toString(), obj.toString());
    }
}

Теперь список объектов Person можно сортировать вызовом статического метода Collections.sort(personList). Либо использовать для хранения объектов коллекцию с автоупорядочиванием, например, TreeSet. При добавлении объекта, реализующего интерфейс Comparable, в такую коллекцию, он автоматически устанавливается на свое место в соответствии с результатом сравнения его (compareTo()) с другими элементами в коллекции.

По сути, не изменяя данных и методов класса, я получил новую полезную функциональность. Для этого потребовалось минимум усилий: объявить о том, что класс реализует соответствующий интерфейс и определить необходимый метод.

Таким же образом можно и далее расширять функциональность класса, путем реализации других интерфейсов. Какие-то интерфейсы требуют определения методов (ex. Runnable), какие-то - нет (ex. Serializable). 

Существует удобная возможность проверить, реализует ли объект тот или иной интерфейс:
Код

// ...
Person person = new Person();
if (person instanceof Runnable) {
    // person is able to be run
    // ...
}


Мощно поддерживается система интерфейсов в коллекциях. К примеру, класс LinkedList реализует интерфейсы List и Queue. Т. о. разработчик может использовать свойства и поведение объекта LinkedList как очереди или как списка в зависимости от ситуации.
PM MAIL   Вверх
soulcub
Дата 28.9.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: нет
Всего: 2



Спасибо большое за ответы)
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.