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