Джава-13
Привет. Напоминаю в рамках тега изучениеджава (хейтерам банить именно его) я вместе с вами изучаю основы джава. Ура у меня появился интернет, поэтому я буду вставлять между развдвенелельными постами пропущенное, т.о. в течение некоторого времени периодичность постинга будет равна одной неделе. Прошу прощения за неудобства. Сегодня узнаем об абстрактных классах.
Java позволяет создавать классы, экземпляры которых создавать нельзя. Такие классы называются абстрактными и обозначаются с помощью ключевого слова abstract. Служат они основой для создания новых классов. Проводя аналогию с готовкой на кухне можно сказать, что абстрактными классами являются соусы, супа, горячие блюда, салаты, гарниры. Так, например, аджика, наршараб, кепчунез являются подклассами соуса. Тогда класс соус может иметь поля: название, состав, соотношение ингредиентов и абстрактный метод «приготовление». Расширяя класс соус, и реализуя метод «приготовление» для конкретного соуса мы получаем реализуемый класс – класс, экземпляр которого можно создать.
Выше обозначено такое понятие как абстрактный метод. Такой метод не имеет реализации, т.е. у него нет кода. Если класс имеет абстрактный метод, то и класс должен быть абстрактным. Абстрактный класс не обязан иметь абстрактные методы. При наследовании абстрактный класс должен быть реализован в наследуемом классе, либо наследуемый класс также должен быть обозначен абстрактным.
В нашем случае (учитывая предыдущие посты) таким классом может стать класс Animal, который будет иметь в иерархии более высокий уровень.
Класс animal имеет конкретное поле name, конструктор, метод getName и абстрактный метод toString. При попытке создать экземпляр класса возникает ошибка. Однако можно создать переменную типа animal, которая будет ссылаться на один из наследуемых и не абстрактных классов.
Как вы видите создан класс Cat, наследуемый (extends) от класса Animal. В нём реализован метод toString, добавлено новое поле murchit, которое достаточно уникально для кошек.
Если мы откажемся от абстрактного класса toString в классе Animal, то не сможем вызвать метод обращением к переменной cat, т.к. в классе Animal такой метод не определён. И нам придется приводить переменную к типу Cat, чтобы иметь возможность использовать метод toString.
В качестве самого простого примера использования абстрактного можно привести элементы управления (кнопка, текстовое поле, надпись, флажок, выпадающий список и т.д.). Все они имеют общие (текст, положение, размер, активность, родитель и т.д.) и уникальные поля (для текстового поля – положение курсора, для флажка – установлен ли значок, для выпадающего списка – выбранный элемент). Используя цикл for each можно, например, получить значение поля «текст» из всех элементов управления на форме.