В мире OO абстрактные классы, используемые для наложения некоторого дизайна & ограничения реализации. Больше ничего. В любом случае вам никогда не придется использовать абстрактные классы. Но могут быть случаи, когда вы лучше навязываете эти ограничения. Итак, каковы они?Давайте посмотрим, сравнивая его со-аналогов.
Абстрактные классы против интерфейсов
Как вы знаете, эти два первичных понятий наследования.
В принципе, интерфейс используется только для того, чтобы заявить, что вы хотите наследовать базовую услугу и все. Не содержит никакой реализации. & не имеет функциональности. В этом смысле интерфейс является абстрактным. Вот почему это более конструктивное ограничение, чем ограничение реализации. Подумайте о разъеме для наушников на динамике. Каждому наушнику необходимо реализовать интерфейс разъема (с запуском, остановкой, прослушиванием, поворотом, методами turnUp). Каждый наушник должен переопределить этот интерфейс, чтобы наследовать функциональность, которую предоставляет динамик и реализовать.
Абстрактные классы, с другой стороны, могут включать методы с реализацией. Это основное отличие, и в этом смысле он может использовать повторное использование больше, чем интерфейс. Более того, они могут содержать частные защищенные & нестатические поля, которые вы не можете использовать через интерфейсы. Вы можете заставить подклассы реализовать некоторые обязательные функции с абстрактными методами (без реализации). Абстрактные классы более гибкие, чем интерфейсы.
Конечно, не говоря уже о том, что вы можете расширить только один класс в java, где вы можете реализовать количество интерфейсов.
Абстрактные классы против регулярных занятий
Так почему бы не использовать обычные классы тогда. В чем преимущество использования абстрактного класса? Это довольно просто. Если вы используете абстрактные классы, вы принудительно выполняете основные функции, выполняемые братьями и сестрами. Как разработчик, вам не нужно помнить, что вы должны выполнять основные функции. Здесь абстрактные классы налагают конструктивные ограничения на обычные классы. Плюс, сделав абстракцию класса, вы избегаете того, что (неполный) класс создается случайно.
Будет ли downvoters, пожалуйста, укажите, почему вы отвечаете на вопросы?!?! – apollodude217