Абстрактный класс - это класс, в котором есть хотя бы один не реализованный метод или ключевое слово abstract.Например, абстрактный метод может выглядеть следующим образом:
public abstract String myMethod(String input);
(обратите внимание, что метод заканчивается точкой с запятой).
И класс может выглядеть так:
public abstract class MyClass {
public abstract String myMethod(String input);
public String anotherMethod(String input) {
return intput + " additional text";
}
}
Абстрактный класс не может быть создан.Абстрактные классы требуют подкласса для реализации отсутствующего поведения, чтобы его можно было реализовать.
Основная цель абстрактного класса - предоставить общую реализацию общего поведения - способствуя повторному использованию кода.
В Java такого же эффекта можно достичь, используя композицию классов вместо наследования от широко определенных абстрактных классов.Это позволяет создавать более модульные, функционально-специфичные классы, способствующие повторному использованию кода, что, в свою очередь, повышает удобство сопровождения.
Мой совет - использовать абстрактный класс только в случае крайней необходимости, и, в частности, избегать его использования в качестве специальной сумки, полной всехвиды функций.
В Scala можно использовать черты, которые являются элегантным способом решения этой проблемы.Тем не менее, это требует большого внимания, чтобы сделать это правильно.