Абстрактный класс против наследования
Абстрактный класс и наследование - две важные объектно-ориентированные концепции, встречающиеся во многих объектно-ориентированных языках программирования, таких как Java. Абстрактный класс можно рассматривать как абстрактную версию обычного (конкретного) класса, в то время как наследование позволяет новым классам расширять другие классы. Абстрактный класс - это класс, который не может быть инициализирован, но может быть расширен. Итак, абстрактные классы имеют смысл иметь только в том случае, если язык программирования поддерживает наследование. В Java абстрактные классы объявляются с использованием ключевого слова Abstract, а ключевое слово Extends используется для наследования от (супер) класса.
Что такое абстрактный класс?
Как правило, абстрактные классы, также известные как абстрактные базовые классы (ABC), не могут быть созданы (экземпляр этого класса не может быть создан). Итак, абстрактные классы имеют смысл иметь только в том случае, если язык программирования поддерживает наследование (возможность создавать подклассы из расширения класса). Абстрактные классы обычно представляют абстрактное понятие или сущность с частичной реализацией или без нее. Следовательно, абстрактные классы действуют как родительские классы, от которых производятся дочерние классы, так что дочерний класс будет разделять неполные функции родительского класса, а для их завершения можно добавить функциональные возможности.
Абстрактные классы могут содержать абстрактные методы. Подклассы, расширяющие абстрактный класс, могут реализовывать эти (унаследованные) абстрактные методы. Если дочерний класс реализует все такие абстрактные методы, это конкретный класс. Но если это не так, дочерний класс также становится абстрактным классом. Все это означает, что, когда программист назначает класс абстрактным, он говорит, что класс будет неполным и в нем будут элементы, которые должны быть завершены наследующими подклассами. Это хороший способ заключить контракт между двумя программистами, который упрощает задачи при разработке программного обеспечения. Программист, который пишет код для наследования, должен точно следовать определениям методов (но, конечно, может иметь свою собственную реализацию).
Что такое наследование?
Наследование - это объектно-ориентированная концепция, которая позволяет новым классам расширять другие классы. Ключевое слово Extends используется для реализации концепции наследования в языке программирования Java. По сути, наследование обеспечивает повторное использование кода, позволяя расширять свойства и поведение существующего класса с помощью вновь определенного класса. Когда новый подкласс (или производный класс) расширяет суперкласс (или родительский класс), этот подкласс наследует все атрибуты и методы суперкласса. Подкласс может дополнительно переопределить поведение (предоставить новые или расширенные функции для методов), унаследованное от родительского класса. Обычно подкласс не может расширять несколько суперклассов (например, в Java). Следовательно, вы не можете использовать расширения для множественного наследования. Чтобы иметь множественное наследование, вам нужно использовать интерфейсы.
В чем разница между абстрактным классом и наследованием?
Абстрактные классы обычно представляют абстрактное понятие или объект с частичной реализацией или без нее. Наследование позволяет новым классам расширять другие классы. Поскольку абстрактные классы не могут быть созданы, вам необходимо использовать концепцию наследования, чтобы использовать абстрактные классы. В противном случае абстрактный класс бесполезен. Абстрактные классы могут содержать абстрактные методы, и когда класс расширяется, все методы (абстрактные и конкретные) наследуются. Унаследованный класс может реализовывать любые или все методы. Если все абстрактные методы не реализованы, этот класс также становится абстрактным классом. Класс не может наследовать более чем от одного абстрактного класса (это не качество абстрактных классов как таковых, а скорее ограничение наследования).