powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
25 сообщений из 123, страница 1 из 5
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39026969
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
В принципе с ООП знаком. Понимаю что есть наследование, инкапсуляция и полиморфизм.
Столкнулся с такой новой для меня штукой как интерфейсы . Нарыл кучу примеров и пояснений, но до сих пор в голове не могу сформировать устойчивого и ясного понимания.

Понимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс. Причем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода).

Вопрос вот в чем: что мне мешает вообще не использовать интерфейсы? Ведь внешне, в плане вызова метода у объекта класса ничего не меняется?! Что мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39026977
Grunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интерфейсы здорово помогают, если тебе необходимо обеспечить унифицированную обработку объектов, не имеющих общего предка (в котором можно было бы описать соответствующий метод).
Искусственный пример: есть два дерева классов - мебель и ядра ОС. Они никак не пересекаются и вообще совершенно независимы друг от друга. Но тебе надо собирать объекты этих классов. Вводится интерфейс
Код: java
1.
ICompile

, в котором определяется метод
Код: java
1.
void Compile();

Теперь, имея на руках, например,
Код: java
1.
List<ICompile>

можно собрать все находящиеся в нем объекты не зная по факту с какими именно объектами ты имеешь дело.
Это очень вкратце и поверхностно. Пусть меня поправят, если что не так.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39026985
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПонимаю что интерфейс содержит в себе как бы декларацию методов, а реализация выполняется внутри методов классов "вызывающих" данный интерфейс.

Да, так было до тех пор пока в Java 8 не добавили методы по-умолчанию.

MAULERПричем внутри класса (использующий интерфейс) через @Override происходит переопределение метода с его реализацией (попросту пишется собственно код метода).

@Override это аннотация помощник компилятору. Если вдруг поменяется только метод интерфейса, но не метод-реализация, то по этой аннотации компилятор может определить что метод класса больше не является переопределением и сгенерировать ошибку.

MAULERВопрос вот в чем: что мне мешает вообще не использовать интерфейсы?
Отсутствие множественного наследования.

MAULERВедь внешне, в плане вызова метода у объекта класса ничего не меняется?!

А если два разных класса реализуют один интерфейс? А если их не два, а много?

MAULERЧто мне мешает не использовать @Override а просто сделать метод внутри класса и использовать его?
Необходимость в полиморфизме.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39026994
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

А если два разных класса реализуют один интерфейс? А если их не два, а много?
Это я как раз понимаю. К примеру объект ob1 класса Rectangle (реализующий интерфейс) пользуется методами calculatePerimeter();
и calculateSquare();

Код: java
1.
2.
	ob1.calculatePerimeter();
	ob1.calculateSquare();



а объект ob2 класса Circle (также реализ. интерфейс) пользуется методами с теми же названиями но уже другой "начинкой" (т.к. площадь и периметр у окружности считаются по другому)

Код: java
1.
2.
	ob2.calculatePerimeter();
	ob2.calculateSquare();



В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? ))
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027016
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERВ чем бонус то? ))

В полиморфизме:
Код: java
1.
2.
3.
4.
5.
6.
class ShapePrinter{   
  void print(IShape shape){
    System.out.println("Perimeter " + shape.calculatePerimeter());
    System.out.println("Square " + shape.calculateSquare());
 }
}



Без интерфейса нужна копипаста:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class ShapePrinter{   
  void print(Rectangle r){
    System.out.println("Perimeter " + r.calculatePerimeter());
    System.out.println("Square " + r.calculateSquare());
 }

  void print(Circle c){
    System.out.println("Perimeter " + c.calculatePerimeter());
    System.out.println("Square " + c.calculateSquare());
 }

}
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027018
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERBlazkowicz,
В итоге выгода от использования интерфейса у меня какая? Да, объекты классов разные а методы называются всё также одинаково. Это наверное удобно, но причем здесь интерфейс? Даже если классов не два а много, ведь все равно реализация методов она будет своя внутри каждого класса. В чем бонус то? ))

Бонус в интерфейсах! ;-)

Грубо говоря пусть будет метод который считает по площади и периметру
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class calc {
   public double calc(IFigure figure) {
      double result;
      ...
      // Тут что-то считаем
      ...
      return result;
   }
} 



Т.о. мы можем передавать в метод calc что Rectangle, что Circle посчитает.
По идее это можно сделать ч/з наследование...
Но т.к. в Java явно запрещено множественное наследование, то сделать что-то через интерфейс проще, чем продумывать иерархию наследования.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027019
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
Grunch тебе привёл пример.
Иногда стройная модель ООП не работает. Приходится подгонять сбоку-припёку интерфейсы.
Не используй пока не понадобятся.
Т.е. например, в примере выше надо использовать шаблон Посетитель.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027021
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,
если раньше программировал на С++, то должен был заметить, что "Java не разрешает множественного наследования, но интерфейсы предоставляют альтернативу. В Java класс может наследовать только один класс, но может реализовывать много интерфейсов. Таким образом объекты могут иметь несколько типов: тип их собственного класса и типы всех реализуемых интерфейсов. "

http://easy-code.ru/lesson/java-interfaces
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027024
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё одна аллегория.
Напр. есть куча разных писем в оутлуке (объекты)
Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027035
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Интрефейс сродни пометкой краской данных писем. Чтобы сгруппировать по признаку.

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

Интерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования (в отличии от интерфейсов COM).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027046
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то
я не понял твою мысль).
"того что не является чем-то"
авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования
тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027055
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).

Про "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027061
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Alexey TominВсякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то
я не понял твою мысль).
"того что не является чем-то"

Группировка выделением интерфейса предполагает введение кучи "маркерных" интерфейсов, не имеющих отношения к абстракциям.


Petro123авторИнтерфейсы java - не более, чем попытка спрятать голову в песок от реального мира множественного наследования
тут вроде не раз перетирали, что реальный мир и множ.насл-е - зло.
Я страюсь работать без интерфейсов. Пока не припрёт)).

Ты настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027075
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andr_andreyПро "Зло" - это всё предрассудки, а идея интерфейсов настолько популярна в библиотеках Java, что должно припирать часто.
У меня память хорошая - поиск на слово "множественное".
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027077
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominТы настолько далёк от общепризнанных в java вещей, что я бы советовал всем слушать тебя и делать наоборот :D
И эти люди мешают ковыряться в носу)).
Alexey TominНеверно. Наследование (равно как и реализация интерфейса там, где нет множественного наследования) - это абстракция "является". Не более. Всякая попытка использовать наследование (интерфейсы) для группировки того, что не является чем-то - приводит к проблемам.

русский язык знаком? Тебя просили просто и доходчиво)).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027078
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов.
Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов?
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027081
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
среди всех ответивших, у тебя самый худший ответ. Уж извини.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027082
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Основное назначение интерфейсов
не будь максималистом....
Есть ещё тестирование....подмена поведения...сериализация... и т.д.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027083
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13приведет пример задачи
вот сначала поиск проведи. А потом задачи ставь).
Эта тема изжёвана 100 раз.
Удачи!
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027085
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д.

Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027091
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Petro123Есть ещё тестирование....подмена поведения...сериализация... и т.д.
Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
Начинается всё программирование от печки (от Модели).
А не от обслуги (сериализации).
Сама модель и моделирование ООП не менялось вот уже ....десятилетий.
Всё остальное приходящее.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027093
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13,
про сериализацию Grunch сказал. Только другим примером (обход объектов).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027131
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Все предыдущие примеры кода не показывают выгоду от использования интерфейсов, т.к. во всех примерах можно ввести базовый абстрактный класс и обойтись без интерфейсов.
Основное назначение интерфейсов - не множественное наследование, а совмещение несовместимого. Чтобы использовать метод с одной и той же сигнатурой у не совместимых между собой объектов. Интересно, здесь хоть один гуру приведет пример задачи, не и имеющей решения без использования интересов?

Ввести базовый абстрактный класс можно, только прятать его придётся вверху иерархии, а интерфейсы удобны тем, что их можно ввести много (удобно дробить по библиотекам) и на любом уровне иерархии. По сути, множественное наследование решало бы проблему в рамках абстрактных классов, но его нет в Java - имеем интерфейсы.
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027142
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andr_andreyно его нет в Java - имеем интерфейсы.
Справедливости ради, его и в delphi нет. Но там проще - там ОРМ нет\не нужен. Поэтому и надобности нет)).
Везде всё по разному).
...
Рейтинг: 0 / 0
Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
    #39027154
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Интересно, почему этого сразу топик стартеру никто не сказал? Это ведь гораздо понятнее для изучения интерфейсов. А то множественное наследование, полиморфизьм какой-то..
Потому что маркерные интерфейсы это костыль. Они появились до того как в Java добавили аннотации.
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 1 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю Java. Объясните пожалуйста просто и доходчиво про интерфейсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]