Хотел узнать, почему если в АБСТРАКТОМ классе мы наследуем/реализуем интерфейс, мы можем его не переопределять.
А если мы в ОБЫЧНОМ классе наследуем/реализуем интерфейс, мы ОБЯЗАНЫ его записать и описать.
Mick
22 уровень
Есть вопрос
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Af1n0chka
20 декабря 2021, 20:57
Потому что когда на основе этого абстрактного класса, будет создан обычный с него спросят за все)
+6
JustinianJudge в Mega City OneMaster
11 октября 2019, 22:37
Все просто.
Абстрактный класс может содержать абстрактные методы (методы без реализации, в том числе, методы интерфейса, который этот абстрактный класс имплементит).
А обычный класс не может содержать абстрактные методы, поэтому нужно их реализовать.
Об таком свойстве абстрактного класса говорит ключевое слово abstract, которое обозначает класс, чей экземпляр мы не можем создать (но обрати внимание, что конструкторы абстрактный класс иметь вполне себе может, они выполняют роль инициализаторов, объект (экземпляр класса) не создается - но код конструктора при вызове отработает ).
А по скольку нет возможности инстанциироваться, то как и интерфейс, экземпляр которого мы тоже не можем создать, никаких обязательств по реализации методов нет - это просто чертеж, а не объект.
+6
Андрей Ермоленко Java Developer
11 октября 2019, 22:16
Хороший вопрос. Наверное, потому что у абстрактного класса не может быть экземпляров, а значит он не может быть конечным "чертежом" объекта. Т.е. реализация методов интерфейса ляжет на плечи класса, который будет экстендить наш абстрактный класс.
+3
Сергей
25 августа 2019, 16:26
Почему классы называют «абстрактными»
Ты наверняка помнишь, что такое «абстракция» — мы это уже проходили :) Если вдруг подзабыл — не страшно, вспомним: это принцип ООП, согласно которому при проектировании классов и создании объектов необходимо выделять только главные свойства сущности, и отбрасывать второстепенные.
Например, если будем проектировать класс SchoolTeacher — школьный учитель — вряд ли понадобится характеристика «рост». Действительно: для преподавателя эта характеристика не важна. Но вот если мы будем создавать в программе класс BasketballPlayer — игрок в баскетбол — рост станет одной из главных характеристик.
абстрактный класс — это максимально абстрактная, о-о-о-чень приблизительная «заготовка» для группы будущих классов. Эту заготовку нельзя использовать в готовом виде — слишком «сырая». Но она описывает некое общее состояние и поведение, которым будут обладать будущие классы — наследники абстрактного класса.
0