Interface или abstract class

164
14 февраля 2018, 11:16

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

Answer 1

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

Answer 2

Абстрактные классы используются там, где можно выделить иерархию и единый функционал для подклассов.

То есть зачастую в абстрактном классе описываются методы (часто с protected модификатором доступа), которые доступны только дочерним классам и устраняют дублирование кода в подклассах или же реализуют метод интерфейса по умолчанию.

Один из ярких примеров библиотека Swing для Java:

Есть интерфейс TableModel, который имеет 9 методов для реализации.
Все 9 методов обычному программисту может быть ненужно реализовывать, для этого разработчики вводят абстрактный класс, который так и называется AbstractTableModel, который уже реализует некоторые методы по умолчанию, таким образом, программисту вместо реализации всех методов из интерфейса, достаточно наследовать класс и описать только нужные ему методы.
Более того, разработчики Swing пошли дальше и создали класс DefaultTableModel, который вообще реализует весь функционал и программисту остается только переопределить методы. которые необходимы для его конкретной задачи.

READ ALSO
Ошибка при сравнении строк String при использовании DecimalFormat в одной из них

Ошибка при сравнении строк String при использовании DecimalFormat в одной из них

Выдаёт ошибку при сравнении полученной строки "String b" с аналогичным значением:

240
Медленно работает пул потоков ExecutorService

Медленно работает пул потоков ExecutorService

Использую библиотеку apache poi для транспонирования строк в Excel Пул потоков в разы медленнее работает, чем без ExecutorService, в чем может быть проблема?

190
Как решить с Ripple в Lolipop

Как решить с Ripple в Lolipop

Я хочу использовать визульаный эффект ripple в Андроид от 16 APIСтандартаня Ripple от гугла не подходит

208
столкновение шаров [требует правки]

столкновение шаров [требует правки]

как осуществить НЕЦЕНТРАЛЬНОЕ столкновение двух шаров на java Нужен именно метод с прописанными формулами так как все остальное есть

230