Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36

В чем смысл интерфейсов?

06.10.2014, 14:01. Показов 5993. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую,
Извините, что опять про интерфейсы.
Полдня курил форумы и статьи про зачем они нужны. С одной стороны, вроде бы понятно: интерфейс - это описание того, что должен уметь делать класс, т.е. если класс имплементирует интерфейс, то это как бы является гарантией, что данный класс будет содержать нужные методы.
Но с другой стороны, никакой гарантии я тут не вижу. Интерфейс гарантирует всего лишь, что класс будет содержать какой-то метод с определенным названием, получающий и возвращающий определенные типы данных, а что он реально делает - никому не известно.
Т.е. даже если я напишу типа
Java
1
2
3
4
5
interface addition {
int sum(int a, int b);
}
 
class c implements addition {}
То это вовсе не означает, что c.sum(int a, int b) даст мне сумму a и b, и все остается на совести разработчика этого класса.
И в чем же тогда профит?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2014, 14:01
Ответы с готовыми решениями:

В чем смысл приватной статической переменной?
Private static int AnyNumber собственно сабж, только что в видео увидел без объяснений. В чем смысл приватной статической переменной?

Java WebStart в чем смысл?
Вот посидел почитал я про это и чего то не понял предназначение этого вебстарт?Зачем он нужен объясните плиззз

Смысл использования интерфейсов
Добрый вечер. Дошел в самоучителе до главы про интерфейсы и в целом мне понятен синтаксис, но я не уверен, что конца понимаю суть...

27
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 14:08
Профит как минимум в наследовании. Extends может быть только один , а implements - сколько угодна.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 14:29  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Профит как минимум в наследовании. Extends может быть только один , а implements - сколько угодна.
В наследовании чего? Названий методов, которые еще не написаны?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.10.2014, 14:31
Severomor1, Гуглите полиморфизм.
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
06.10.2014, 14:48
Severomor1, приведу примитивный пример. Есть основной класс Животные и класс Волк, Заяц, Медведь. Все эти животные разные. Например класс Волк, Заяц и Медведь наследуют (основные свойства класса Животные, например вес, цвет и тд). А есть еще классы, которые реализуют действия животных, например классы: бегать, прыгать, нападать на людей, есть траву. Так вот, основную информацию с весом, цветом и тд все животные наследуют от основного класса, а вот умение бегать, прыгать и тд, каждое животное реализует отдельно. Тоесть к волку мы подключаем интерфейсы, бегать и нападать на людей, а к зайцу, бегать и есть траву.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:09  [ТС]
Цитата Сообщение от 1ds Посмотреть сообщение
Severomor1, приведу примитивный пример. Есть основной класс Животные и класс Волк, Заяц, Медведь. Все эти животные разные. Например класс Волк, Заяц и Медведь наследуют (основные свойства класса Животные, например вес, цвет и тд). А есть еще классы, которые реализуют действия животных, например классы: бегать, прыгать, нападать на людей, есть траву. Так вот, основную информацию с весом, цветом и тд все животные наследуют от основного класса, а вот умение бегать, прыгать и тд, каждое животное реализует отдельно. Тоесть к волку мы подключаем интерфейсы, бегать и нападать на людей, а к зайцу, бегать и есть траву.
Спасибо, это понятно. Но интерфейс же не содержит реализации, какой смысл, например, подключать интерфейс бегать, если все равно и у волка и у зайца мы должны написать реализацию методов этого интерфейса?
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 15:24
Severomor1, одно дело расширить класс, от которого объект наследует свойства, а другое допилить еще один лишний интерфейс.

Добавлено через 40 секунд
class c extends A implements addition1,addition2,addition3.... {}

Добавлено через 55 секунд
Может быть ситуация, что к классу А у вас нет доступа и вы его физически не можете модифицировать. Но есть выход! Интерфейсы
0
21 / 21 / 5
Регистрация: 26.12.2013
Сообщений: 177
06.10.2014, 15:29
Интерфейсы чаще используют как метки классов, что-то вроде шаблонов, для большей понимабельности кода(стандартизации).
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
06.10.2014, 15:36
Severomor1, хорошо, тогда смотрите так...Если между классами можно поставить отношение "является", то это наследование. Например волк является животным, но не каждое животное является волком. Тут идет наследование. Если класс, что-то реализует, нейкое действие (бегать, летать, плавать), то это является интерфейсами в данном случае. Вы главное поймите, что у вас волк получает интерфейс "охотиться", а заяц "есть траву", вот так описывается разница между объектами.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:38  [ТС]
Я, конечно, понимаю, что я нуб и опозорился, но профит от интерфейсов все равно пока не понял. )
Вот например с extends все понятно, мы получаем возможность использовать все методы класса, от которого мы наследуем. А implements не дает ничего, кроме требования реализовать в классе все методы интерфейса. Но если они нам нужны, то мы их можем реализовать и без интерфейса. Или он нужен исключительно для того, чтобы мы не забыли это сделать?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
06.10.2014, 15:40
Смысл как минимум в том, что интерфейсы позволяют создать легко расширяемую ОО-систему и при разумном проектировании сэкономить на количестве кода(так как вместо того, чтобы всё время использовать конкретный тип и дублировать код, мы можем использовать полиморфизм). Если вам нужно будет поддерживать вашу программу, например надо будет постоянно добавлять новые возможности, без интерфейсов не обойтись. Конечно обойтись без них можно, но со временем вообще нереально будет поддерживать вашу систему. Почитайте о проектировании объектно-ориентированных систем, увидите, без абстракции там никак.
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 15:41
Severomor1, интерфейс может относиться к разным классам. Если класс наследует какой-то интерфейс, то он должен методы этого интерфейса хотя бы опубликовать у себя. Он их не обязан реализовывать. Можно оставить их пустыми и реализовать только нужные методы интерфейса.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:41  [ТС]
Цитата Сообщение от sashok991 Посмотреть сообщение
Интерфейсы чаще используют как метки классов, что-то вроде шаблонов, для большей понимабельности кода(стандартизации).
Вооот, я примерно так и думал. Что интерфейсы это что то сродни комментариям, типа, не забудьте в этом классе сделать такие то методы. Но это едва ли стоит тех восторгов, которые я читал о пользе интерфейсов.
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
06.10.2014, 15:42
Цитата Сообщение от Severomor1 Посмотреть сообщение
Что интерфейсы это что то сродни комментариям, типа, не забудьте в этом классе сделать такие то методы.
Это самое худшее, что можно было бы приписать интерфейсу.
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 15:45
Представьте себе 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  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Severomor1, интерфейс может относиться к разным классам. Если класс наследует какой-то интерфейс, то он должен методы этого интерфейса хотя бы опубликовать у себя. Он их не обязан реализовывать. Можно оставить их пустыми и реализовать только нужные методы интерфейса.
Это понятно. Но ведь мы можем реализовать в классе эти же самые методы и без подключения интерфейса, правда же?
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 15:47
Severomor1, конечно можно. Но это будет не так гибко и модифицируемо. И эти методы будут подходить только к вашему классу и нигде больше (без переписывания кода)
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 15:57  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Severomor1, конечно можно. Но это будет не так гибко и модифицируемо. И эти методы будут подходить только к вашему классу и нигде больше (без переписывания кода)
Таак, а вот это уже интересно. То есть если я напишу:

interface addition {
int sum(int a, int b);
}

class c implements addition {
int sum(int a, int b) {return a+b;}
}

то я смогу использовать данную реализацию метода sum где то еще, а не писать ее заново?
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
06.10.2014, 16:04
нет, реализацию нельзя. только объявление.

Т.е. если вы где-то еще напишете class d implements addition, то надо будет заново реализовывать метод sum.

Добавлено через 2 минуты
Severomor1, В интерфейсах нет реализации, это абстракция, которая позволяет организовать множественное наследование

Добавлено через 1 минуту
Таким образом, с одной стороны, интерфейс — это «договор», который обязуется выполнить класс, реализующий его, с другой стороны, интерфейс — это тип данных, потому что его описание достаточно чётко определяет свойства объектов, чтобы наравне с классом типизировать переменные. Следует, однако, подчеркнуть, что интерфейс не является полноценным типом данных, так как он задаёт только внешнее поведение объектов. Внутреннюю структуру и реализацию заданного интерфейсом поведения обеспечивает класс, реализующий интерфейс; именно поэтому «экземпляров интерфейса» в чистом виде не бывает, и любая переменная типа «интерфейс» содержит экземпляры конкретных классов.
0
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
06.10.2014, 16:04  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Т.е. если вы где-то еще напишете class d implements addition, то надо будет заново реализовывать метод sum.
Ну так все равно же заново реализовывать. В чем же тогда заключается гибкость и модифицируемость? Подключим мы интерфейс или не подключим, все равно в каждом классе надо писать метод sum.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2014, 16:04
Помогаю со студенческими работами здесь

В чем суть интерфейсов?
За день я в интернете начиталась столько всего про интерфейсы, что запуталась до нельзя!!! И так, звучит главный вопрос: в чем же суть...

В чем заключается необходимость интерфейсов?
Народ объясните мне новичку в чем заключается необходимость интерфейсов в С# и какую выгоду можно от этого получить ? Ведь если к...

В чем смысл this
Доброго время суток...Объяснить пожалуйста в чем смысл this??? Такой вопрос в билете на зачете .... ни как не могу внятно сформулировать....

В чем смысл?
Привет всем! Не могу понять - в чем смысл магазинов электронных книг? Можно ведь скачать абсолютно бесплатно! У них что, качество...

В чем смысл указателей?
Дорогие друзья, не могу понять смысл указателей в С++? Для чего они нужны? Если не трудно на реальном примере объясните ,пожалуйста.


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

Или воспользуйтесь поиском по форуму:
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