Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/35: Рейтинг темы: голосов - 35, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176

Зачем нужны интерфейсы?

25.06.2014, 12:36. Показов 6788. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начинаю изучать JAVA , есть такое понятие как интерфейс, вот, умею пользоваться, но не понимаю зачем они нужны.
Зачем нужны интерфейсы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2014, 12:36
Ответы с готовыми решениями:

Зачем нужны интерфейсы когда есть абстрактные классы?
Собсно говоря сабж. Не пойму зачем нужны интерфейсы когда то-же самое можно сделать на абстрактных классах. Для примера возьмём...

Зачем интерфейсы?
Можно простыми словами зачем нужны интерфейсы? В разных источниках описывают все достаточно сложно

Зачем нужны ссылки на методы?
Типа System.out.println()? Нет, конечно, я понимаю, что они позволяют сократить запись вида s -> System.Out.println(s), но это как-то...

6
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
25.06.2014, 13:00
Во многих ООП языках программирования применяется концепция множественного наследования. Это довольно проблемная тема, особенно для новичков, поскольку следует следовать определенным пралам использования множественного наследования из-за возможности некорректного выбора вызываемого члена.

Представьте такую иерархию: Собака, Домашнее животное, Лабрадор.
Лабрадор является и специфичной версией Собаки и Домашнего эивотного. В языке программирования С++ класс Лабрадор прямо наследовал бы и класс Собака и Домашнее животное. Но теперь представим, что они умеют делать.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Dog {
     public void bark() {
          System.out.println("Собака гавкает!");
     }
}
 
class Pet {
     public void bark() {
          System.out.println("Домашнее животное лает!");
     }
}
 
// такое в Java невозможно ! но давайте представим, что такой синтаксис допустим
class Labrador extends Dog, Pet {
     public static void main(String[] args) {
          new Labrador().bark(); // какой метод вызывать - унаследованный от Dog или Pet ? 
     }
}
Это называется проблемой ромба "смерти". В С++ есть целый ряд правил множественного наследования, но разработчики Java стремились к простоте, поэтому придумали элегантное и простое решение - интерфейсы. Они представляют собой 100 процентный абстрактный класс (выразимся так) - то есть все методы, реализованные в интерфейсе, каждый класс реализующий данный интерфейс обязан реализовать. Это позволяет использовать интерфейсы во всевозможных иерархиях, класс может реализовывать столько интерфейсов, сколько ему нужно. К тому же, это хорошая система callback - если у вас есть коллекция объектов, реализующие определенный интерфейс, вы можете при необходимости вызывать методы, определенные в данном интерфейсе, а объекты будут выполнять свою собственную реализацию этих методов. Вы можете посмотреть, как устроена система слушателей в java.awt / javax.swing пакетах - интерфейсы слушателей используются для callback'а.

Таким образом, мы исправляем предыдущий код.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Dog {
     public void bark() {
          System.out.println("Собака гавкает!");
     }
}
 
interface Pet {
     void bark();
}
 
// такое в Java невозможно ! но давайте представим, что такой синтаксис допустим
class Labrador extends Dog implements Pet {
     public void bark() { 
          System.out.println("Лабрадор лает!"); // переопределили метод, унаследованный от Dog 
          // и реализовали метод, определенный в интерфейсе Pet
     }
 
     public static void main(String[] args) {
          new Labrador().bark();
     }
}
Вывод: Лабрадор лает!

Надеюсь, объяснил понятно.
4
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
25.06.2014, 13:10  [ТС]
Freedomen, А вот например у меня такая задачка: есть класс диск, класс песня, класс диск имеет два поля имя и список из экземпляров класса песня. И мне нужно сделать так, чтобы я мог выбрать диск , написать комманду play в консоль и мне выведет строку типо : сейчас проигрывается такая песня, по такому принципу действуют команды next и stop. Но так же у меня должен быть девайс в зависимости от которого строка будет немного изменятся, например при комманде play будет выводится на консоль имя песни , статус : проигрывается.
А теперь вопрос может мне создать интерфейс device и его будут реализовывать n-ое количество классов, которые и будут выводить по разному эту строку?
Наверно немного абстрактно рассказал.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
25.06.2014, 13:46
Цитата Сообщение от Greens239 Посмотреть сообщение
Но так же у меня должен быть девайс в зависимости от которого строка будет немного изменятся, например при комманде play будет выводится на консоль имя песни , статус : проигрывается.
Вот этот момент не понял. Девайс может быть инструмент воспроизводящий песню или что? На диске хранится коллекция песен, у каждой песни есть свое имя. Но вам нужно создать N-е количество песен и загрузить в диск, после этого какой-то инструмент должен это воспроизвести. Можно сделать интерфейс Device с методами play() и loadSong(), потом создать класс-котроллер, который будет загружать песни и проигрывать их, опираясь на коллекцию этих песен, и реализуя интерфейс Device. Ну или можете сделать супер-класс Device с определенными методами, но тогда каждый дочерний класс должен будет при необходимости переопределять методы, если они должны быть по-разному реализованы.
0
26.06.2014, 13:41

Не по теме:

Freedomen, во втором случае как раз такой синтаксис для джавы допустим (class Labrador, line 12).

0
26.06.2014, 18:34

Не по теме:

Хах, это я скопировал предыдущий листинг кода, забыл стереть комментарий. Надеюсь, модераторы исправят, спасибо, что заметили. :)

0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
26.06.2014, 20:03
Greens239, гляньте еще эту тему: Интерфейсы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2014, 20:03
Помогаю со студенческими работами здесь

Зачем в jvm нужны строковые константы
Пишу небольшую jvm (не очень строго соблюдая спецификацию) и компилятор под это дело. Столкнулся с таким вот вопросом. По спецификации в...

Создаю массив по книге. Объясните зачем нужны эти цифры. см.внутри
Что делает этот кусок кода ? int twoD = new int ; /*зачем нужно указывать значение здесь--->*/ twoD = new int ;/* <--для...

Зачем нужны исключения
Пожалуйста можете привести пример, когда они действительно нужны? На лекции были примеры "деление на ноль",...

Зачем нужны Интерфейсы
Здравствуйте. Вот такой у меня вопрос, касательно самой сути интерфейсов - зачем они нужны? В моем понимании интерфейс - видимая часть...

Зачем нужны интерфейсы?
Никак не могу понять. Вроде все методы потом объявляются в классе.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru