|
|
|
Зачем интерфейсы?18.11.2016, 01:39. Показов 1491. Ответов 13
Метки нет (Все метки)
0
|
|
| 18.11.2016, 01:39 | |
|
Ответы с готовыми решениями:
13
Зачем нужны интерфейсы? Зачем нужны интерфейсы когда есть абстрактные классы? Интерфейсы |
|
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
|
|
| 18.11.2016, 07:41 | |
|
1) Интерфейс дает гарантию того, что все его методы будут переопределены. Что полезно знать.
2) В функцию можно передавать ссылку на переменную интерфейса. Можно реализовать класс по интерфейсу и потом передать в функцию. Это даст гарантию того, что только классы, обладающие свойствами интерфейса смогут вызвать эту функцию. 3) Интерфейсы позволяют создавать "множественное" наследование, так как один класс может реализовывать несколько интерфейсов, в отличии от абстрактных классов. 4) Для некоторых обобщенных функций необходима реализация классом того или иного интерфейса. Например, Comparable для sort. Вообще, у них много схожего в абстрактными классами, если вам понятна роль последних, то интерфейсы тоже.
1
|
|
|
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
|
|
| 18.11.2016, 08:04 | |
|
HardLogin, например, вы хотите, чтобы при сортировке не надо было каждый раз создавать Comparator, реализуете Comparable. Пишете свой односвязный список - реализуете Collection, пишите класс для потока - реализуете Runnable, хотите переопределить clone() - реализуете Clonable и тд
0
|
|
|
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
|
|||||||||||||||||||||
| 18.11.2016, 10:35 | |||||||||||||||||||||
|
Еще пример. Вы используете базу MySQL.
А потом вам вдруг понадобилось резко перейти с MySQL на XML-файлы. Весь код переписывать? А так получается, что у вас есть интерфейс UserDAOInterface, например. Для управления юзерами.
0
|
|||||||||||||||||||||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 18.11.2016, 13:47 | |
|
List - интерфейс.
У него есть разные реализации - ArrayList и LinkedList. Таким образом, ты можешь писать свою программу используя везде List. А чтобы поменять реализацию тебе будет достаточно в одном месте исправить ArrayList на LinkedList, например. Это возможно, потому что интерфейс определяет набор методов, которые точно должны быть у объекта. Т.е. совершенно неважно, передадут тебе в метод ArrayList или LinkedList. Так как они реализуют интерфейс List ты можешь у каждого из них вызвать метод add и тебе вообще не надо знать, какой конкретно тип тебе передали, ты работаешь с List. Добавлено через 26 секунд и гугли SOLID
0
|
|
|
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
|
||
| 18.11.2016, 14:15 | ||
Сообщение было отмечено HardLogin как решение
РешениеОднажды вы засыпаете, и просыпаетесь с женой Олей. Кто-то подменил. Она тоже убирает, но убирает только частные дома. И варит только гороховый суп. Вы жене говорите "свари мне суп". Если это Наташа - она сварит красный борщ. Если это Оля - то гороховый. Если вы наелись гороховым супом, можете опять сменить жену на Наташу. А можете еще реализовать Свету, которая будет варить солянку. Т.е. вам без разницы, кто конкретно является женой. Наташа, Оля или Света. Вы общаетесь с ней как с женой. Жена - интерфейс. Наташа и Оля - разные реализации этого интерфейса.
6
|
||
|
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
|
|
| 19.11.2016, 01:13 | |
|
Нет, в данном случае это интерфейс. Допустим, что любая жена (Наташа, Оля, Света, да кто угодно) утюжит рубашки. И делают они это совершенно одинаково. Допустим, даже условие такое есть - женщина не может считаться женой, пока не научилась утюжить рубашки мужу. Причем строго определенным образом.
Теперь это абстрактный класс. Классы Наташа, Оля и Света имеют совершенно одинаковый функционал, метод "утюжить рубашки". Зачем его реализовывать отдельно в каждом классе? Делаем абстрактный класс Жена и выносим этот метод в него. Абстрактный класс содержит реализацию некоторых методов. Каждый дочерний класс унаследует ее. Интерфейс не содержит реализацию. Только объявления методов. Если мы наследуемся от абстрактного класса, то мы больше не можем ни от чего этот класс наследовать. Интерфейсы же позволяют множественное имплементирование, при этом еще и для наследования остается свободное место.
1
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|||
| 19.11.2016, 02:25 | |||
|
1
|
|||
|
|
|
| 19.11.2016, 10:42 [ТС] | |
|
Т.е. интерфейс объединяет два и больше класса которые имею одну и ту же функцию но реализуют её по разному? Т.е. мотор, программа и принтер имеют один и тот же метод "запустить", значит это интерфейс? Если да, тогда чем классический пример с фигурами(есть класс фигура и наследуется от него круг, квадрат и т.д. каждая фигура считает площадь по разному) не пример интерфейса? Ведь там есть всего одна ф-ия(вычисление площади) которая обязательно должна быть переопределена в производных от Shape классах, выходит Shape - интерфейс.. Или не так?
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 19.11.2016, 12:20 | |
|
1
|
|
|
|
|
| 19.11.2016, 12:59 [ТС] | |
|
Кажется я понял, всем спасибо за ответы
0
|
|
| 19.11.2016, 12:59 | |
|
Помогаю со студенческими работами здесь
14
Интерфейсы интерфейсы Интерфейсы
интерфейсы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|