Суть моего непоинмания в следующем:
Мы создаем интерфейс, или абстрактный класс, но все методы в классе который его наследует нужно писать заного.
не проще ли просто без наследования интерфейсов прописать в классе необходимые методы?
P.S.знаю что если было бы проще, то так и делали бы, но не могу с моим уровнем знаний смоделировать ситуацию где без интерфейсов и абстрактных классов былобы архисложно
Antoni
16 уровень
Подскажите по интерфейсам, и абстрактным классам в практическом смысле
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ярослав Java Developer Master
13 июня 2018, 10:37решение
На маленьких программах этого и не увидеть. С ростом программы выгода от абстрактных классов и интерфейсов очевидная.
Полиморфизм. Полиморфизм - "много форм". Это очень мощная техника, особенно при использовании интерфейсов. Суть в переводе полиморфизма - мы можем создавать универсальные методы и сооружать гибкость программы так, как мы хотим.
Для примера, есть интерфейс:
Все классы, которые реализуют данный интерфейс, обозначают, что их объекты можно очистить. Писать всю иерархию классов сейчас не буду, но представь, что у нас есть абстрактный класс Detail (деталь) и абстрактный класс Garbage (мусор). И у каждого из них есть какие-то производные классы (шестеренка, труба, банановая кожура, пустая бутылка и так далее).
Мы можем все производные объекты собрать в одной коллекции: List<Clearable> toClear. Сюда мы можем засунуть как и деталь, так и мусор, потому что оба класса реализуют интерфейс Clearable, и работать с каждым объектом мы будем через интерфейс. Нам известно только то, что объект делает, но неизвестно то, как он это делает.
Тогда, когда мы собрали все детали и весь мусор в одной коллекции, мы можем сделать так:
Таким образом, мы собрали ВСЕ объекты ВСЕХ производных классов ВСЕХ абстрактных классов, которые реализовывали данный интерфейс. А представь, как это надо было бы реализовывать без интерфейсов. Такого удобства достичь без интерфейса не получилось бы. Надо было создавать две отдельные коллекции (одна для Detail, одна для Garbage). А представь, если бы и абстрактных классов не было...
P.S. По идее, можно еще заменить лямбду на ссылку на метод интерфейса. Тогда будет:
+4
Ярослав Java Developer Master
13 июня 2018, 10:41решение
И если бы абстрактных классов не было (имеется ввиду, что нельзя было бы унаследовать логику другого класса), то тебе бы приходилось для каждого класса переписывать метод clear(), и для каждого класса создавать коллекцию, и для каждой коллекции вызывать очистку. Еще хуже дело обстояло бы с методами, но это другая история, думаю этого материала уже должно хватить для понимания пользы.
+4
Antoni
13 июня 2018, 10:59
Огромное спасибо :)
0