Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19

Для чего нужны интерфейсы?

24.07.2022, 01:13. Показов 4520. Ответов 91
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Я посмотрел вокруг и тоже решил позадавать тупые вопросы. Например, я не могу понять, зачем нужны интерфейсы как таковые? Что мешает реализовывать методы без использования интерфейсов? Почему-то большинство людей отвечают на этот вопрос в стиле "ну интерфейс - это такая штука, ей можно делать то-другое", а после вопроса "кто мешает делать то же самое без интерфейса? Вот убираешь "implements"... ии?" замолкают.
Из всего, что я выяснил, у меня получилось два пункта: первое - по интерфейсу можно группировать разные объекты (например, запихнуть в ArrayList), второе - чтобы в большом проекте не провтыкать вещи, которые должен реализовывать определённый класс. Имеют ли мои выводы отношение к жизни и можно ли к ним добавить ещё что-то?
Ну или ткните в умную литературу, только о том, что такое интерфейс и как его делать я и так начитался.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2022, 01:13
Ответы с готовыми решениями:

Для чего нужны параметры метода? Return для хранения данных?
Привет всем! Подскажите пожалуйста, параметры метода нужны для того что бы получать значения с вызывающего класса? И не важно как именуется...

Для чего нужны эти скобки?
Доброго времени суток! Я начинающий в Java и вот совсем недавно занялся Swing. На Швабре прочитал статью о том как создать свой LaF(Look...

Для чего нужен абстрактные классы/интерфейсы?
Для чего нужны абстрактные классы/интерфейсы? Уже устал лазить по форумам, везде довольно размытые ответы. Я понимаю, что абстрактный класс...

91
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
24.07.2022, 09:15
https://docs.oracle.com/javase... index.html
https://refactoring.guru/ru/de... s/strategy
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
24.07.2022, 09:15
5iv1i73, про полиморфизм почитай для начала.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:04
iSmokeJC, скорее про абстракции и контракты.
Цитата Сообщение от 5iv1i73 Посмотреть сообщение
первое - по интерфейсу можно группировать разные объекты (например, запихнуть в ArrayList)
Гетерогенность списков к интерфейсам не имеет никакого отношения. Внутри это обычный Object.
Цитата Сообщение от 5iv1i73 Посмотреть сообщение
второе - чтобы в большом проекте не провтыкать вещи, которые должен реализовывать определённый класс.
Покури ООП:
Implementing an interface allows a class to become more formal about the behavior it promises to provide. Interfaces form a contract between the class and the outside world, and this contract is enforced at build time by the compiler. If your class claims to implement an interface, all methods defined by that interface must appear in its source code before the class will successfully compile.
Добавлено через 3 минуты
Цитата Сообщение от asdzxc Посмотреть сообщение
https://refactoring.guru/ru/de... s/strategy
Паттерн "Стратегия" немного мимо кассы, имхо.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
24.07.2022, 10:14  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
Implementing an interface allows a class to become more formal about the behavior it promises to provide. Interfaces form a contract between the class and the outside world, and this contract is enforced at build time by the compiler. If your class claims to implement an interface, all methods defined by that interface must appear in its source code before the class will successfully compile.
Если я правильно понимаю, то выделенный кусок - ключевой. Так?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:17
5iv1i73, я уже выделил ключевую мысль курсивом:
Цитата Сообщение от Arsegg Посмотреть сообщение
to become more formal about the behavior it promises to provide
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
24.07.2022, 10:20  [ТС]
Arsegg, пардон, просмотрел курсив. Тем не менее, понятнее не стало, поэтому я и спрашиваю: что случится, если этого не делать?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:24
5iv1i73, получится нечто такое:
Кликните здесь для просмотра всего текста
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:25
Pigeon extends Helicopter.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
24.07.2022, 10:27  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
получится нечто такое:
реализация методов останется такой же, только без дополнительного описания.

Цитата Сообщение от Arsegg Посмотреть сообщение
Pigeon extends Helicopter
ну я и говорю: чисто для удобства написания большой командой
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:28
5iv1i73, т. е. для тебя голубь - это вертолет? Я правильно тебя понял?
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
24.07.2022, 10:31  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
5iv1i73, т. е. для тебя голубь - это вертолет? Я правильно тебя понял?
если объяснишь, каким образом от называния голубя вертолётом у него отрастёт винт - то возможно
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
24.07.2022, 10:32
5iv1i73, кури ООП. Мои полномочия все.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.07.2022, 15:56
Цитата Сообщение от 5iv1i73 Посмотреть сообщение
провтыкать
- что означает это слово?

Интерфейс позволяет добавлять классу нужное поведение. Пусть есть классы A и B. Я хочу добавить им два поля и три метода. При этом, поля и методы будут служить однотипным задачам. Можно добавить их в каждый класс. Но тогда придется об этом помнить. Если же собрать методы и поля в интерфейс, реализовать его в A и в B, то теперь об этом будет помнить компилятор. Что позволяет писать более надежный код.

Вторая (очень веская) причина: в Java нет множественного наследования. Но класс может реализовывать несколько интерфейсов, что покрывает 90% выгод множественного наследования.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
26.07.2022, 17:25  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- что означает это слово?
Пропустить

Цитата Сообщение от Catstail Посмотреть сообщение
Если же собрать методы и поля в интерфейс, реализовать его в A и в B, то теперь об этом будет помнить компилятор.
Да, я именно об этом

Цитата Сообщение от Catstail Посмотреть сообщение
Но класс может реализовывать несколько интерфейсов
может, но ведь вся логика, при этом, будет так же реализована в самом классе? Поэтому что изменится, если написать её без подключения интерфейсов?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.07.2022, 18:27
5iv1i73, изучи solid и лекции дяди боба посмотри
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
27.07.2022, 04:16
Цитата Сообщение от 5iv1i73 Посмотреть сообщение
Поэтому что изменится, если написать её без подключения интерфейсов?
- Представь, что таких разных классов не два, а пять или более. Ты принципиальный противник интерфейсов. Всю функциональность реализуешь вручную. И забываешь реализовать один метод у одного из классов. Компилятор - молчок. Это вполне допустимо. Дальше спокойно используешь эти пять классов. Все работает. И ты привыкаешь к этой мысли. Но однажды делаешь попытку вызова пропущенного метода. Падение. А если пользоваться интерфейсами, то подобной ситуации не возникнет.

Добавлено через 1 час 21 минуту
5iv1i73, могу продолжить твою логику. А зачем вообще нужны объекты? Любую задачу можно решить без них! Не так ли? Машине Тьюринга никакие объекты не нужны... Да и в выскоуровневых ЯП объекты появились далеко не сразу. Зачем?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.07.2022, 07:54
Чего вы пристали к человеку? Пусть пишет без интерфейсов, для хэлловорлдов они не нужны. А если он дальше продвинется, то в скором времени до него дойдет, зачем и почему они нужны. Вспомнит этот топик и устыдится.
1
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 19
27.07.2022, 09:01  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- Представь, что таких разных классов не два, а пять или более. Ты принципиальный противник интерфейсов. Всю функциональность реализуешь вручную. И забываешь реализовать один метод у одного из классов. Компилятор - молчок. Это вполне допустимо. Дальше спокойно используешь эти пять классов. Все работает. И ты привыкаешь к этой мысли. Но однажды делаешь попытку вызова пропущенного метода. Падение. А если пользоваться интерфейсами, то подобной ситуации быть не возникнет.
то есть то, что я написал в первом сообщении: чтобы не пропустить.

iSmokeJC, проблема немножко в другом: вы сами то ли не знаете, что ли не можете объяснить, зачем они нужны. Во всей ветке вы не ушли дальше моего первого поста, что наводит на определённые мысли.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.07.2022, 09:08
Есть класс Утка. Есть класс Воробей. Есть класс Синица. Нужно сложить их в один список. Чем типизировать список? Обджект? Как тогда перебрать весь список и вызвать у каждого объекта метод "лететь" например?

Добавлено через 19 секунд

Не по теме:

Цитата Сообщение от 5iv1i73 Посмотреть сообщение
вы сами то ли не знаете
да куда нам...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2022, 09:08
Помогаю со студенческими работами здесь

Для чего нужны custom Tags ?
Для чего вы используете custom Tags? Приведите конкретные примеры.

Struts для чего они нужны?
Привет всем! Сразу прошу не бить ногами, если кому-то вопрос показался идиотским. Но дело в том, что уже некоторое время пытаюсь...

Зачем нужны интерфейсы?
Начинаю изучать JAVA , есть такое понятие как интерфейс, вот, умею пользоваться, но не понимаю зачем они нужны. Зачем нужны интерфейсы?

Что такое Ant и Struts, и для чего нужны?
Доброго времени суток! Во многих IDE очень много упоминается про Ant и Struts. Хотелось бы узнать по подробнее от профессионалов, что...

Коллекции List/ArrayList: чем отличаются и для чего нужны?
ОБЪЯСНИТЕ ЧТО ТАКОЕ LIST И ARRAYLIST,ЧЕМ ОНИ ОТЛИЧАЮТСЯ И ДЛЯ ЧЕГО НУЖНЫ ВОТ ЕЩЕ ДВА ЗАДАНИЯ,Я ЧТО-ТО ПОПЫТАЛСЯ СДЕЛАТЬ,НО ПОКА ЧТО НЕ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru