0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
||||||
1 | ||||||
В чем смысл интерфейсов?06.10.2014, 14:01. Показов 5385. Ответов 27
Метки нет Все метки)
(
Приветствую,
Извините, что опять про интерфейсы. Полдня курил форумы и статьи про зачем они нужны. С одной стороны, вроде бы понятно: интерфейс - это описание того, что должен уметь делать класс, т.е. если класс имплементирует интерфейс, то это как бы является гарантией, что данный класс будет содержать нужные методы. Но с другой стороны, никакой гарантии я тут не вижу. Интерфейс гарантирует всего лишь, что класс будет содержать какой-то метод с определенным названием, получающий и возвращающий определенные типы данных, а что он реально делает - никому не известно. Т.е. даже если я напишу типа
И в чем же тогда профит?
0
|
|
06.10.2014, 14:01 | |
Ответы с готовыми решениями:
27
Java WebStart в чем смысл?
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 14:29 [ТС] | 3 |
0
|
В астрале
![]() 8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
06.10.2014, 14:31 | 4 |
Severomor1, Гуглите полиморфизм.
0
|
06.10.2014, 14:48 | 5 |
Severomor1, приведу примитивный пример. Есть основной класс Животные и класс Волк, Заяц, Медведь. Все эти животные разные. Например класс Волк, Заяц и Медведь наследуют (основные свойства класса Животные, например вес, цвет и тд). А есть еще классы, которые реализуют действия животных, например классы: бегать, прыгать, нападать на людей, есть траву. Так вот, основную информацию с весом, цветом и тд все животные наследуют от основного класса, а вот умение бегать, прыгать и тд, каждое животное реализует отдельно. Тоесть к волку мы подключаем интерфейсы, бегать и нападать на людей, а к зайцу, бегать и есть траву.
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 15:09 [ТС] | 6 |
Спасибо, это понятно. Но интерфейс же не содержит реализации, какой смысл, например, подключать интерфейс бегать, если все равно и у волка и у зайца мы должны написать реализацию методов этого интерфейса?
0
|
06.10.2014, 15:24 | 7 |
Severomor1, одно дело расширить класс, от которого объект наследует свойства, а другое допилить еще один лишний интерфейс.
Добавлено через 40 секунд class c extends A implements addition1,addition2,addition3.... {} Добавлено через 55 секунд Может быть ситуация, что к классу А у вас нет доступа и вы его физически не можете модифицировать. Но есть выход! Интерфейсы
0
|
19 / 19 / 5
Регистрация: 26.12.2013
Сообщений: 168
|
|
06.10.2014, 15:29 | 8 |
Интерфейсы чаще используют как метки классов, что-то вроде шаблонов, для большей понимабельности кода(стандартизации).
0
|
06.10.2014, 15:36 | 9 |
Severomor1, хорошо, тогда смотрите так...Если между классами можно поставить отношение "является", то это наследование. Например волк является животным, но не каждое животное является волком. Тут идет наследование. Если класс, что-то реализует, нейкое действие (бегать, летать, плавать), то это является интерфейсами в данном случае. Вы главное поймите, что у вас волк получает интерфейс "охотиться", а заяц "есть траву", вот так описывается разница между объектами.
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 15:38 [ТС] | 10 |
Я, конечно, понимаю, что я нуб и опозорился, но профит от интерфейсов все равно пока не понял. )
Вот например с extends все понятно, мы получаем возможность использовать все методы класса, от которого мы наследуем. А implements не дает ничего, кроме требования реализовать в классе все методы интерфейса. Но если они нам нужны, то мы их можем реализовать и без интерфейса. Или он нужен исключительно для того, чтобы мы не забыли это сделать?
0
|
06.10.2014, 15:40 | 11 |
Смысл как минимум в том, что интерфейсы позволяют создать легко расширяемую ОО-систему и при разумном проектировании сэкономить на количестве кода(так как вместо того, чтобы всё время использовать конкретный тип и дублировать код, мы можем использовать полиморфизм). Если вам нужно будет поддерживать вашу программу, например надо будет постоянно добавлять новые возможности, без интерфейсов не обойтись. Конечно обойтись без них можно, но со временем вообще нереально будет поддерживать вашу систему. Почитайте о проектировании объектно-ориентированных систем, увидите, без абстракции там никак.
0
|
06.10.2014, 15:41 | 12 |
Severomor1, интерфейс может относиться к разным классам. Если класс наследует какой-то интерфейс, то он должен методы этого интерфейса хотя бы опубликовать у себя. Он их не обязан реализовывать. Можно оставить их пустыми и реализовать только нужные методы интерфейса.
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 15:41 [ТС] | 13 |
Вооот, я примерно так и думал. Что интерфейсы это что то сродни комментариям, типа, не забудьте в этом классе сделать такие то методы. Но это едва ли стоит тех восторгов, которые я читал о пользе интерфейсов.
0
|
06.10.2014, 15:45 | 15 |
Представьте себе USB-разъем на вашем компе. Это класс. А есть переходники с USB на микро-usb, на SD - вот это набор интерфейсов. И они подходят не только для вашего USB-разьема, но и для других USB-разъемов, которые наследуют этот интерфейс.
Добавлено через 1 минуту Но чтобы ваш USB-разъем начал передавать данные - нужно реализовать метод интерфейса USB-out например. А класс SD например должен будет реализовать метод SD-in Этого интерфейса, чтобы получить данные от вашего USB.
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 15:46 [ТС] | 16 |
Это понятно. Но ведь мы можем реализовать в классе эти же самые методы и без подключения интерфейса, правда же?
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 15:57 [ТС] | 18 |
Таак, а вот это уже интересно. То есть если я напишу:
interface addition { int sum(int a, int b); } class c implements addition { int sum(int a, int b) {return a+b;} } то я смогу использовать данную реализацию метода sum где то еще, а не писать ее заново?
0
|
06.10.2014, 16:04 | 19 |
нет, реализацию нельзя. только объявление.
Т.е. если вы где-то еще напишете class d implements addition, то надо будет заново реализовывать метод sum. Добавлено через 2 минуты Severomor1, В интерфейсах нет реализации, это абстракция, которая позволяет организовать множественное наследование Добавлено через 1 минуту Таким образом, с одной стороны, интерфейс — это «договор», который обязуется выполнить класс, реализующий его, с другой стороны, интерфейс — это тип данных, потому что его описание достаточно чётко определяет свойства объектов, чтобы наравне с классом типизировать переменные. Следует, однако, подчеркнуть, что интерфейс не является полноценным типом данных, так как он задаёт только внешнее поведение объектов. Внутреннюю структуру и реализацию заданного интерфейсом поведения обеспечивает класс, реализующий интерфейс; именно поэтому «экземпляров интерфейса» в чистом виде не бывает, и любая переменная типа «интерфейс» содержит экземпляры конкретных классов.
0
|
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
|
|
06.10.2014, 16:04 [ТС] | 20 |
Ну так все равно же заново реализовывать. В чем же тогда заключается гибкость и модифицируемость? Подключим мы интерфейс или не подключим, все равно в каждом классе надо писать метод sum.
0
|
06.10.2014, 16:04 | |
Помогаю со студенческими работами здесь
20
В чем заключается необходимость интерфейсов? В чем смысл this В чем смысл? В чем смысл указателей? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |