вот уже который раз сталкиваюсь с такой проблемой, когда не понимаю, что лучше использовать. абстрактный класс или интерфейс. например, я храню Ability в списке. у всех способностей есть getName(), getPrice() и т.д. здесь я использовала интерфейс и создавала классы, реализующие его. тут появился вопрос. я ведь точно таким же образом могла сделать не интерфейс, а абстрактный класс. так что лучше и когда?..
Maxim724
22 уровень
Abstract class или Interface?
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
14 июня 2019, 10:24
так что лучше и когда?..
на данный момент от нас требуется знать хорошо синтаксис (теорию) интерфейса и абстрактных классов. Какие особенности, как объявляются, наследование, возможность параметризации, дефолтные методы, проблема ромбовидного наследования, в чем суть аннотации @Override , как это все связано с полиморфизмом, как работает и тд.
Это то о чем пишет Стас.
И только спустя некоторое время практического опыта, мы начнем видеть что когда используется, что чаще, что реже, в каких ситуациях, будем сами писать, верно или ошибаться и с временем можно ответить на этот вопрос, ответ на который нельзя осознать на данном уровне, когда у нас задачки на несколько классов, и все можно в один класс напихать. Уже с 20-го пойдут большие задачи, там нужно обращать внимание на дизайн приложений. И уделить время разбору почему именно такая архитектура, почему используется интерфейс или абстрактный класс, что это нам дает, можно ли без этого и как бы было, если бы не было интерфейса/абстрактного класса и тд.
А когда пойдет ЕЕ часть и веб-проекты, то там уже точно все должно сложиться )
Я свое мнение еще сам не сформировал, абстрактный класс тоже интересный и полезный инструмент, но я видел его очень редко в тех проектах, которые попадались на глаза. Интерфейс используется повсеместно.
+1
Maxim724 Java Developer
16 июня 2019, 13:45
Тоже самое. чаще всего встречаю интерфейсы (когда смотрю чужой код), абстрактные классы очень редко
0
Стас Пасинков Software Developer в Zipy Master
13 июня 2019, 15:07
интерфейсы лучше почти всегда
абстрактные классы нужны для общей логики (общая реализация (код) методов)
интерфейсы - больше для взаимосвязи между объектами (привет, полиморфизм!)
никто вам не мешает использовать и абстрактные классы, и интерфейсы одновременно))
+3
Стас Пасинков Software Developer в Zipy Master
13 июня 2019, 15:09
конечно, для программ типа hello world - лишние уровни абстракции (интерфейсы, абстрактные классы) будут скорее мешать.
но при разработке чего-то серьезного - вы 1000 раз поблагодарите вселенную за интерфейсы и полиморфизм :)
0
Стас Пасинков Software Developer в Zipy Master
13 июня 2019, 15:13
для вашего примера, если у разных абилитей будет разная реализация тех методов getName(), getPrice() итд - тогда обычные классы + интерфейс будет достаточно.
если же у абилитей будет одинаковая логика некоторых методов - можно ее дополнительно вынести в абстрактный класс.
если логика будет во многом похожа, но все же немного разная - общие части можно вынести в абстрактный класс, а в наследниках вызывать через super.getName() тогда, когда это будет надо наследнику
0
Maxim724 Java Developer
14 июня 2019, 09:43
спасибо
0
Стас Пасинков Software Developer в Zipy Master
14 июня 2019, 11:09
пожалуйста)
а еще при помощи лямбд можно будет передавать родителю еще и куски кода, который родитель сможет выполнять когда надо будет. и из каждого наследника передавать разные куски кода и в зависимости от того, какой наследник вызвал суперметод - разные лямбды выполнятся)
в общем, можно очень много чего делать))) при помощи стандартных возможностей джавы
0