|
|
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Добрый день. В принципе с ООП знаком. Понимаю что есть наследование, инкапсуляция и полиморфизм. Столкнулся с такой новой для меня штукой как интерфейсы . Нарыл кучу примеров и пояснений, но до сих пор в голове не могу сформировать устойчивого и ясного понимания. Понимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Причем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода). Вопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Интерфейсы здорово помогают, если тебе необходимо обеспечить унифицированную обработку объектов, не имеющих общего предка (в котором можно было бы описать соответствующий метод). Искусственный пример: есть два дерева классов - мебель и ядра ОС. Они никак не пересекаются и вообще совершенно независимы друг от друга. Но тебе надо собирать объекты этих классов. Вводится интерфейс Код: java 1. , в котором определяется метод Код: java 1. Теперь, имея на руках, например, Код: java 1. можно собрать все находящиеся в нем объекты не зная по факту с какими именно объектами ты имеешь дело. Это очень вкратце и поверхностно. Пусть меня поправят, если что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:50 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERПонимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Да, так было до тех пор пока в Java 8 не добавили методы по-умолчанию. MAULERПричем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода). @Override это аннотация помощник компилятору. Если вдруг поменяется только метод интерфейса, но не метод-реализация, то по этой аннотации компилятор может определить что метод класса больше не является переопределением и сгенерировать ошибку. MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Отсутствие множественного наследования. MAULERВедь внешне, в плане вызова метода у объекта класса ничего не меняется?! А если два разных класса реализуют один интерфейс? А если их не два, а много? MAULERЧто мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его? Необходимость в полиморфизме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 12:55 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, А если два разных класса реализуют один интерфейс? А если их не два, а много? Это я как раз понимаю. К примеру объект ob1 класса Rectangle (реализующий интерфейс) пользуется методами calculatePerimeter(); и calculateSquare(); Код: java 1. 2. а объект ob2 класса Circle (также реализ. интерфейс) пользуется методами с теми же названиями но уже другой "начинкой" (т.к. площадь и периметр у окружности считаются по другому) Код: java 1. 2. В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:06 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERВ чем бонус то? )) В полиморфизме: Код: java 1. 2. 3. 4. 5. 6. Без интерфейса нужна копипаста: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:38 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULERBlazkowicz, В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? )) Бонус в интерфейсах! ;-) Грубо говоря пусть будет метод который считает по площади и периметру Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Т.о. мы можем передавать в метод calc что Rectangle, что Circle посчитает. По идее это можно сделать ч/з наследование... Но т.к. в Java явно запрещено множественное наследование, то сделать что-то через интерфейс проще, чем продумывать иерархию наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, Grunch тебе привёл пример. Иногда стройная модель ООП не работает. Приходится подгонять сбоку-припёку интерфейсы. Не используй пока не понадобятся. Т.е. например, в примере выше надо использовать шаблон Посетитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
MAULER, если раньше программировал на С++, то должен был заметить, что "Java не разрешает множественного наследования, но интерфейсы предоставляют альтернативу. В Java класс может наследовать только один класс, но может реализовывать много интерфейсов. Таким образом объекты могут иметь несколько типов: тип их собственного класса и типы всех реализуемых интерфейсов. " http://easy-code.ru/lesson/java-interfaces ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:47 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
ещё одна аллегория. Напр. есть куча разных писем в оутлуке (объекты) Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 13:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку. Неверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам. Интерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования (в отличии от интерфейсов COM). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:08 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то я не понял твою мысль). "того что не является чем-то" авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:21 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). Про "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:30 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то я не понял твою мысль). "того что не является чем-то" Группировка выделением интерфейса предполагает введение кучи "маркерных" интерфейсов, не имеющих отношения к абстракциям. Petro123авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло. Я страюсь работать без интерфейсов. Пока не припрёт)). Ты настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:35 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
andr_andreyПро "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто. У меня память хорошая - поиск на слово "множественное". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:42 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominТы настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D И эти люди мешают ковыряться в носу)). Alexey TominНеверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам. русский язык знаком? Тебя просили просто и доходчиво)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:45 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов. Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:46 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, среди всех ответивших, у тебя самый худший ответ. Уж извини. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:48 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Основное назначение интерфейсов не будь максималистом.... Есть ещё тестирование....подмена поведения...сериализация... и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:49 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13приведет пример задачи вот сначала поиск проведи. А потом задачи ставь). Эта тема изжёвана 100 раз. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:52 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д. Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:56 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д. Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. Начинается всё программирование от печки (от Модели). А не от обслуги (сериализации). Сама модель и моделирование ООП не менялось вот уже ....десятилетий. Всё остальное приходящее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:04 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13, про сериализацию Grunch сказал. Только другим примером (обход объектов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:05 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов. Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов? Ввести базовый абстрактный класс можно, только прятать его придётся вверху иерархии, а интерфейсы удобны тем, что их можно ввести много (удобно дробить по библиотекам) и на любом уровне иерархии. По сути, множественное наследование решало бы проблему в рамках абстрактных классов, но его нет в Java - имеем интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:37 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
andr_andreyно его нет в Java - имеем интерфейсы. Справедливости ради, его и в delphi нет. Но там проще - там ОРМ нет\не нужен. Поэтому и надобности нет)). Везде всё по разному). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:43 |
|
||
|
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
|
|||
|---|---|---|---|
|
#18+
host.13Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то.. Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39027093&tid=2125025]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
186ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 531ms |

| 0 / 0 |
