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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интефейсы 
:(
    Опции темы
Гость_Novice
Дата 3.3.2004, 15:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите плиз зачем нужны интерфейсы confused.gif
кроиме как для мнодественнго наследования confused.gif
не понимаю я !!! sad.gif
  Вверх
Nobody
Дата 3.3.2004, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот для него-то они и нужны =)


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
Sun
Дата 4.3.2004, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

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



Интерфейсы нужны не для множественного наследования (которого в Java на самом деле нет), а для организации позднего связывания (поллиморфизма). Интерфейс представляет собой не сам класс, а лишь описание его методов. На базе интерфейса создаются классы, реализующие эти методы. В результате мы можем получить набор классов выполняющих разную работу, но имеющие один интерфейс (набор методов).

Интерфейсы Java можно сравнить с интерфейсами аппаратными. Например к PCI интерфейсу компьютера мы можем подключать различные, не похожие друг на друга устройства - видеокарты, звуковые карты, модемы. У этих устройств нет почти ничего общего и выполняют они разные функции, но подключить их все можно к PCI интерфейсу.


--------------------
Account removed
PM MAIL   Вверх
Unregistered
Дата 5.3.2004, 01:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо большое Sun !!! за исчерпывающий ответ !
  Вверх
Unregistered
Дата 5.3.2004, 01:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
)
Интерфейс представляет собой не сам класс, а лишь описание его методов. На базе интерфейса создаются классы, реализующие эти методы


А зачем ? если мы просто создадим класс с такимиже методами без имплементации что изменется confused.gif

Цитата

в результате мы можем получить набор классов выполняющих разную работу, но имеющие один интерфейс (набор методов).


Зачем confused.gif множе просто использовать наследование и добиться тогоже


  Вверх
Sun
Дата 5.3.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

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



Интерфейсы улучшают планирование будущей системы или библиотеки классов. Можно взять в качестве примера интерфейс java.util.List. Его методы описывают типичное поведение списков, такие как add(), remove(), get(). На основе этого интерфейса мы можем реализовать классы с различным поведением, но имеющию одинаковый интерфейс. В результате мы можем в вызове какой-нибудь функции объявить параметр типа List, а передавать в него ArrayList, LinkedList, Vector.

При грамотном построении системы сначала идет ее планирование. На этом этапе закладывается идеология будушей системы, устанавливаются связи между объектами. На этом этапе как раз можно объявить интерфейсы. Фактически это работа системного аналитика и проектировщика. Они создают план, по которому будет строиться будущая система, а уже непосредственно реализацию будут выполнять программисты. Интерфейсы это просто более высокий уровень абстракции, они сродни чистым виртуальным классам в C++.


--------------------
Account removed
PM MAIL   Вверх
breeezy
Дата 10.3.2004, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Зачем  множе просто использовать наследование и добиться тогоже

Уточнение.
Наследоваться (extends) можно только от одного класса,
а выполнять (implements) интерфейсов - сколько хочешь!
PM ICQ   Вверх
Wowa
Дата 8.12.2005, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Может кто-нибудь привести краткий и наглядный пример ввиде кода, где используется интерфейс?
PM WWW   Вверх
batigoal
Дата 8.12.2005, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Рыба и лодка - совершенно разноплановые объекты, но они могут плавать. Допустим, нам нужно создать список плавающих объектов. Объединять в иерархию нелогично - общих черт нет. Используем интерфейс:

Код

public interface Swimable
{
  public void swim();
}

class Boat
{
  ...
  public void swim()
  {
    ...
  }
  ...
}

class Fish
{
  ...
  public void swim()
  {
    ...
  }
  ...
}

class Main
{
  ...
  public void makeSwimableList()
  {
    ArrayList<Swimable> list = new ArrayList<Swimable>();
    list.add(new Fish());
    list.add(new Boat());

    ...

   Iterator iterator = list.getIterator();
   while(iterator.hasNext())
   {
      iterator.next().swim();
   }
  }
  ...
}


В коде мог и напотрачить - не проверял, да и не пользовался я еще никогда пятеркой smile

Это сообщение отредактировал(а) Lamer George - 8.12.2005, 23:44


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Wowa
Дата 8.12.2005, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



А что делает эта строчка: iterator.next().swim(); ? Вызывает интерфейс или сразу метод класса? И почему iterator.next(), а не iterator.current() ?
PM WWW   Вверх
LSD
Дата 8.12.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Wowa @ 8.12.2005, 23:51)
А что делает эта строчка: iterator.next().swim(); ?

Получает следующий элемент и вызывает у него метод swim().

Цитата(Wowa @ 8.12.2005, 23:51)
Вызывает интерфейс или сразу метод класса?

Метод реального объекта, или его предка если в этом объекте он не переопределен.


Цитата(Wowa @ 8.12.2005, 23:51)
И почему iterator.next(), а не iterator.current() ?

Метода current() нет, только next() и hasNext(). Итератор позволяет только один раз пройтись по коллекции.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 9.12.2005, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата

Метода current() нет, только next() и hasNext(). Итератор позволяет только один раз пройтись по коллекции.

Понятно, спасибо.



А вот, что касается интерфейса, то чего-то все равно непонятно, для чего мы создали интерфейс Swimable.
PM WWW   Вверх
batigoal
Дата 9.12.2005, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(Wowa @ 9.12.2005, 01:07)
А вот, что касается интерфейса, то чего-то все равно непонятно, для чего мы создали интерфейс Swimable.

Потому что иначе мы не смогли бы сделать список из объектов разных классов. Ведь тогда тебе пришлось бы извлекать объект из коллекции и приводить его к типу... а неизвестно какому типу: Boat или Fish. А так, мы можем просто указать: объекты такого-то, такого-то и такого-то класса не похожи, но все они могут быть охарактеризованы, как плавающие.

То же самое можно было сделать, унаследовав их от абстрактного класса Swimables, например. Но интерфейсы более логичны. К тому же, класс не может наследовать нескольким классам. А вот несколько интерфейсов реализовывать может. Например, "плавающий" и "летающий". И потом ты, допустим, сделаешь иерархию транспортных средств, и укажешь всем самолетам, что они "летающие". А гидропланы - еще и "плавающие".

Это сообщение отредактировал(а) Lamer George - 9.12.2005, 00:19


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Wowa
Дата 9.12.2005, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Lamer @ 8.12.2005, 22:16)
А вот несколько интерфейсов реализовывать может. Например, "плавающий" и "летающий". И потом ты, допустим, сделаешь иерархию транспортных средств, и укажешь всем самолетам, что они "летающие". А гидропланы - еще и "плавающие".

можно пример? smile
PM WWW   Вверх
batigoal
Дата 9.12.2005, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(Wowa @ 9.12.2005, 01:28)
можно пример?

Можно... но завтра (мне через пять часов на работу идти smile )
Может, чего-нибудь попрактичней придумаю.


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

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

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


 




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


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

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