Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1

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

18.11.2016, 01:39. Показов 1491. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно простыми словами зачем нужны интерфейсы? В разных источниках описывают все достаточно сложно
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2016, 01:39
Ответы с готовыми решениями:

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

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

Интерфейсы
Разработать программу, демонстрирующую работу с интерфейсами. Программа должна определять класс Человек, в котором должны определяться...

13
 Аватар для shilko2013
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
18.11.2016, 07:41
1) Интерфейс дает гарантию того, что все его методы будут переопределены. Что полезно знать.
2) В функцию можно передавать ссылку на переменную интерфейса. Можно реализовать класс по интерфейсу и потом передать в функцию. Это даст гарантию того, что только классы, обладающие свойствами интерфейса смогут вызвать эту функцию.
3) Интерфейсы позволяют создавать "множественное" наследование, так как один класс может реализовывать несколько интерфейсов, в отличии от абстрактных классов.
4) Для некоторых обобщенных функций необходима реализация классом того или иного интерфейса. Например, Comparable для sort.
Вообще, у них много схожего в абстрактными классами, если вам понятна роль последних, то интерфейсы тоже.
1
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1
18.11.2016, 07:55  [ТС]
Цитата Сообщение от shilko2013 Посмотреть сообщение
Вообще, у них много схожего в абстрактными классами, если вам понятна роль последних, то интерфейсы тоже.
Неа. Роль последних как раз таки понятна еще с плюсов. А можно пример где надо юзать интерфейс?
0
 Аватар для shilko2013
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, например. Для управления юзерами.

Java
1
2
3
4
public class MySQLUser implements UserDaoInterface {
 
    // тут действия с таблицей User.
}
Вот так вы его подключаете:

Java
1
2
3
4
UserDAOInterface userDAO = new MySQLUser();
 
// и вот так с ним работаете, для очень примитивного примера:
userDAO.add(user)
В случае с XML файлом вы просто создаете еще одну реализацию интерфейса:
Java
1
2
3
4
public class XMLUser implements UserDaoInterface {
 
    // тут действия с файлом User.xml.
}
И работаете точно также:
Java
1
2
UserDAOInterface userDAO = new XMLUser();
userDAO.add(user)
Т.е. для того, чтобы добавить поддержку новых функций вам достаточно создать еще одну реализацию интерфейса и подключить ее. Не надо лопатить весь код и заменять все. Тем более, если позже придет решение поменять обратно на MySQL.
0
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1
18.11.2016, 13:29  [ТС]
А можно пример из жизни?
0
Эксперт Java
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 как решение

Решение

Цитата Сообщение от HardLogin Посмотреть сообщение
А можно пример из жизни?
Есть у вас жена Наташа, например. Она убирает квартиру и варит красные борщи.
Однажды вы засыпаете, и просыпаетесь с женой Олей. Кто-то подменил. Она тоже убирает, но убирает только частные дома. И варит только гороховый суп.
Вы жене говорите "свари мне суп". Если это Наташа - она сварит красный борщ. Если это Оля - то гороховый. Если вы наелись гороховым супом, можете опять сменить жену на Наташу. А можете еще реализовать Свету, которая будет варить солянку.
Т.е. вам без разницы, кто конкретно является женой. Наташа, Оля или Света. Вы общаетесь с ней как с женой.

Жена - интерфейс. Наташа и Оля - разные реализации этого интерфейса.
6
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1
18.11.2016, 23:57  [ТС]
Идеально Только то что вы описали очень похоже на абстрактный класс, не очень понятно когда же все таки использовать нужно интерфейс а когда абстрактный класс.
0
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
19.11.2016, 01:13
Нет, в данном случае это интерфейс. Допустим, что любая жена (Наташа, Оля, Света, да кто угодно) утюжит рубашки. И делают они это совершенно одинаково. Допустим, даже условие такое есть - женщина не может считаться женой, пока не научилась утюжить рубашки мужу. Причем строго определенным образом.
Теперь это абстрактный класс. Классы Наташа, Оля и Света имеют совершенно одинаковый функционал, метод "утюжить рубашки". Зачем его реализовывать отдельно в каждом классе? Делаем абстрактный класс Жена и выносим этот метод в него.

Абстрактный класс содержит реализацию некоторых методов. Каждый дочерний класс унаследует ее. Интерфейс не содержит реализацию. Только объявления методов.
Если мы наследуемся от абстрактного класса, то мы больше не можем ни от чего этот класс наследовать. Интерфейсы же позволяют множественное имплементирование, при этом еще и для наследования остается свободное место.
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.11.2016, 02:25
Цитата Сообщение от Virkom Посмотреть сообщение
Абстрактный класс содержит реализацию некоторых методов.
Не совсем точно. Абстрактный класс может содержать реализацию. А может и не содержать.

Цитата Сообщение от Virkom Посмотреть сообщение
Интерфейс не содержит реализацию.
Верно до 8ой версии джавы. Начиная с 8ой версии, интерфейс может содержать дефолтную реализацию.
1
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1
19.11.2016, 10:42  [ТС]
Т.е. интерфейс объединяет два и больше класса которые имею одну и ту же функцию но реализуют её по разному? Т.е. мотор, программа и принтер имеют один и тот же метод "запустить", значит это интерфейс? Если да, тогда чем классический пример с фигурами(есть класс фигура и наследуется от него круг, квадрат и т.д. каждая фигура считает площадь по разному) не пример интерфейса? Ведь там есть всего одна ф-ия(вычисление площади) которая обязательно должна быть переопределена в производных от Shape классах, выходит Shape - интерфейс.. Или не так?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.11.2016, 12:20
Цитата Сообщение от HardLogin Посмотреть сообщение
выходит Shape - интерфейс
в данном случае Shape может быть интерфейсом.
1
 Аватар для HardLogin
54 / 54 / 2
Регистрация: 20.01.2013
Сообщений: 832
Записей в блоге: 1
19.11.2016, 12:59  [ТС]
Кажется я понял, всем спасибо за ответы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2016, 12:59
Помогаю со студенческими работами здесь

Интерфейсы
Как это понимать? public interface Service{ } public interface BlaBla{ Service newServices(); }

интерфейсы
вот есть код public interface Employee { String name = null; double salary = 0; int year = 0; public double...

Интерфейсы
Помогите разобраться с интерфейсами, я их вроде как понял :), но в стандартных библиотеках Java, что-то для меня не понятное. Например,...

Интерфейсы
Что бы не оффтопить в соседней теме, я создал эту. Цель - понять в чем все-таки разница между двумя строками (ниже) и в чем профит при...

интерфейсы
Здравствуйте. В данном примере есть 2 интерфейса и класс А, который их реализует, а также вызываю метод f() через интерфейсную ссылку...


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

Или воспользуйтесь поиском по форуму:
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru