-2

Джава-13

Привет. Напоминаю в рамках тега изучениеджава (хейтерам банить именно его) я вместе с вами изучаю основы джава. Ура у меня появился интернет, поэтому я буду вставлять между развдвенелельными  постами пропущенное, т.о. в течение некоторого времени периодичность постинга будет равна одной неделе. Прошу прощения за неудобства. Сегодня узнаем об абстрактных классах.


Java позволяет создавать классы, экземпляры которых создавать нельзя. Такие классы называются абстрактными и обозначаются с помощью ключевого слова abstract. Служат они основой для создания новых классов. Проводя аналогию с готовкой на кухне можно сказать, что абстрактными классами являются соусы, супа, горячие блюда, салаты, гарниры. Так, например, аджика, наршараб, кепчунез являются подклассами соуса. Тогда класс соус может иметь поля: название, состав, соотношение ингредиентов и абстрактный метод «приготовление». Расширяя класс соус, и реализуя метод «приготовление» для конкретного соуса мы получаем реализуемый класс – класс, экземпляр которого можно создать.


Выше обозначено такое понятие как абстрактный метод. Такой метод не имеет реализации, т.е. у него нет кода. Если класс имеет абстрактный метод, то и класс должен быть абстрактным. Абстрактный класс не обязан иметь абстрактные методы. При наследовании абстрактный класс должен быть реализован в наследуемом классе, либо наследуемый класс также должен быть обозначен абстрактным.


В нашем случае (учитывая предыдущие посты) таким классом может стать класс Animal, который будет иметь в иерархии более высокий уровень.

Джава-13 Изучениеджава, Java, Длиннопост

Класс animal имеет конкретное поле name, конструктор, метод getName и абстрактный метод toString. При попытке создать экземпляр класса возникает ошибка. Однако можно создать переменную типа animal, которая будет ссылаться на один из наследуемых и не абстрактных классов.

Джава-13 Изучениеджава, Java, Длиннопост

Как вы видите создан класс Cat, наследуемый (extends) от класса Animal. В нём реализован метод toString, добавлено новое поле murchit, которое достаточно уникально для кошек.


Если мы откажемся от абстрактного класса toString в классе Animal, то не сможем вызвать метод обращением к переменной cat, т.к. в классе Animal такой метод не определён. И нам придется приводить переменную к типу Cat, чтобы иметь возможность использовать метод toString.


В качестве самого простого примера использования абстрактного можно привести элементы управления (кнопка, текстовое поле, надпись, флажок, выпадающий список и т.д.). Все они имеют общие (текст, положение, размер, активность, родитель и т.д.) и уникальные поля (для текстового поля – положение курсора, для флажка – установлен ли значок, для выпадающего списка – выбранный элемент). Используя цикл for each можно, например, получить значение поля «текст» из всех элементов управления на форме.

Найдены возможные дубликаты

+1

Не дай Боже кому-нибудь попытаться понять твои "уроки".

0

я пишу на Delphi... знаком и с Java и с C#... могу сказать, что различия между синтаксисом языков с каждым годом все меньше и меньше...

0
Джаву не знаю. Знаю С++/#.
1. Абстрактный класс не есть класс экземпляр которого нельзя создать, чаще всего ещё как можно ибо тогда накуя нам весь этот полиморфизм.
2. Чаще всего абстрактным называют класс имеющий хотя-бы одну чистую виртуальную функцию или же абстрактную.
3. Абстрактный класс не должен быть реализован в подклассах(не верная формулировка), там реализуют его методы которые были помечены как абстрактные или чисто виртуальные(С++) и требующие явной реализации.
Я советую тебе почитать более качественные статьи и уроки ибо судя по содержанию ты не понял философию этой идеи. И вообще на какой ляд городить класс вместо описания просто класса и абстрактных интерфейсов которых можно наследовать пачками и что в принципе является правильной стратегией отделения представления объектов от операций над их содержимым
0

Надо было еще написать, что объект типа Animal можно таки создать через анонимный класс, хотя это возможно в следующей главе будет. А так вобще норм.

раскрыть ветку 1
0

я прост про это пока не знаю =/

0

метод toString() есть у каждого объекта в Java. если его убрать из класса Animal, то ничего не поменяется. более того, в классе Cat его даже можно не переопределять, не смотря на то, что в Animal он объявлен как абстрактный. в этом случае будет использован метод класса java.lang.Object

раскрыть ветку 2
0

ну как же, мы можем быть подлыми и возвращать toString'ом билиберду. А лень, являющаяся причиной выбора именно toString, помогла узнать о том, что ты написал, о чём и будет указано в следующем посте.

раскрыть ветку 1
0

делать фигню можно с любым методом. сами примеры говорят о том, что ты сам не понял зачем нужны абстрактные классы, а то что ты узнал об этом от меня, говорит лишь о том, что примеры на практике ты не проверял, иначе узнал бы об этом раньше. ну и это далеко не то, что стоит узнавать.

0

Можно запихнуть к примеру твой toString в Интерфейс

Похожие посты
Похожие посты не найдены. Возможно, вас заинтересуют другие посты по тегам: