Абстрактные классы в Java
Абстрактные классы в Java используются для создания классов, которые могут содержать абстрактные методы – методы без реализации, которые должны быть переопределены в подклассах. Абстрактный класс не может быть инициирован, то есть мы не можем создать объекты этого класса. Зато он может содержать как абстрактные методы, так и обычные методы с реализацией. Для чего же вообще нужны классы, экземпляры которых мы не можем создать? Чтобы получше понять суть абстрактных классов рекомендую сначала прочитать статью Зачем нужно наследование в ООП. Там я приводил пример, в котором 3 класса Маг, Охотник и Воин наследуются от одного единственного класса Person, что помогло нам избавиться от дублирования кода. Этот класс скорее вспомогательный, объекты класса Person вряд ли пригодятся нам для написания кода, поэтому, чтобы сделать наш код еще лучше, можно сделать этот класс абстрактным, дописав к нему ключевое слово abstract. Казалось бы, для чего нам ставить такие огранич