В теме интерфейсов и абстракции пока не очень силен... Но что-то в голове уже есть. Как у меня сложилось, интерфейс и абстрактный класс похожи между собой. При этом, работая с интерфейсами, есть возможность унаследовать их несколько, в то время как абстрактный класс только один. Из этого исходят вопросы : в каких случаях лучше использовать абстрактный класс, а в каких интерфейсы? Можно ли интерфейсами полностью заменить абстракцию?
Егор
16 уровень
Вопрос для гуру не по задаче
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #1384518Expert
31 июля 2019, 22:53
Например есть класс Message — сообщение, имеющий 2 поля (переменные класса):
И есть наследники:
+7
Anonymous #1384518Expert
31 июля 2019, 22:54
Мы видим, что у родителя и наследников есть общее(похожее) описание класса (структура), например, поля, доступные через геттеры/сеттеры
А вот интерфейсы (как вариант, набросал 4 примера):
Добавив их к классам и реализуя их, мы дадим им какое-то поведение.
Главное понимание, которое должно придти, это что мы не можем унаследовать вертолёт от танка, если они оба умеют стрелять например.
Или наследовать стул от кошки, потому что у них по 4 ноги.
В этом и есть разница. Классы объединяют что-то общее по концептуальному смыслу, свойства какие-то.
А интерфейсы описывают поведение. И мы можем дать классу разное поведение.
Например для email можно было создать интерфейс для отправки изображений/документов, которое к sms уже не логично прицеплять.
+5
zatolokinboris
24 апреля 2020, 16:00
Спасибо за полезный и развернутый комментарий!
0
Dmitry TsybankovЭлектромонтёр в Пищевое производство
12 ноября 2021, 19:38
Классно всё описал) а в конце я бы добавил, что вертолет от танка не унаследуем, а вот интерфейс 'стрельба' можно дать им обоим)
0