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