В этой задаче будем создавать книги земных авторов Марка Твена и Агаты Кристи. Разумеется, с помощью классов MarkTwainBook и AgathaChristieBook, которые наследуется от Book. В этих классах нужно реализовать все абстрактные методы, а в родительском классе реализуйте тело метода getOutputByBookType.
ООП - книги
- 16
- Недоступна
Комментарии (395)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий вы должны авторизоваться
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
8 января, 00:50
Сейчас разберёмся, поехали:
1. Создаём классы, которые наследуются от класса книги, имеют статическую строку с именем автора и строку с названием книги.
2. Внутри созданных классов делаем конструкторы, которые принимают в параметрах строку с названием книги и присваивают её своему объекту, но сначала вызывают конструктор родителя
и передают ему аргументом строку со своим автором.
3. Переопределяем у наследников родительские методы, первый возвращает свой экземпляр объекта, а второй возвращает строку с названием книги.
4. В абстрактном классе проверяем, если (автор.соответствует("Строке с именем автора")), то присваиваем переменной output соответствующую автору строку.
5. Всё получится!
--
tlgrm: @LetsCodeIt | @SefoNotasi
+5
Anonymous #239261 19 уровень, Нижний Новгород
7 января, 16:46
Чем лучше делать проверку для вывода equals или instanceof? И почему?
0
Дмитрий 18 уровень
30 декабря 2020, 08:53
Делал по инструкции, в классе переопределил автора:
0
Александр Артихович 16 уровень, Минск
30 декабря 2020, 10:03
Только все перепутал. Конструктор должен принимать название книги - title, а не автора. В первой строке вызывается конструктор базового класса через super, внутри скобок указываешь прямо текстом имя автора. super всегда в конструкторах на первом месте и в третьей строке его использовать не надо. В самом классе должна быть переменная title и присвоение ей значения осуществляется через this.title = title;
+1
Дмитрий 18 уровень
3 января, 23:06
Во- первых, в базовом классе принимаем все-таки автора. Во- вторых, внутри конструктора мы можем называть переменные как угодно, главное чтоб конструктор принимал верные значения.
0
Александр Артихович 16 уровень, Минск
4 января, 18:40
Главное, чтобы Вы логику понимали. Здесь автор передается в родительский класс из класса с именем этого автора. Надо ли в конструктор этого же класса передавать дополнительно имя автора, если оно известно? Думаю, что нет. Его в родительский класс можно передать через super("Mark Twain"). Чего и хотят от нас авторы задачи. И теперь где в вашем варианте конструктор возьмет название книги? Из аргумента String author? Так будет работать, но нарушит конвенцию об именовании переменных и запутает всех, кто после Вас будет работать с этим кодом. И все ради того, чтобы на этом построить отговорку? Ваше право, конечно, я лишь хотел обратить внимание, что лучше сделать по-другому. Вы и сами можете это увидеть в правильном варианте сайта.
+5
Игорь 19 уровень, Москва
26 декабря 2020, 10:55
if (getBook().getClass().getSimpleName().equals("название класса автора")) - проверял автора так.
+1
Aleksandr 26 уровень, Санкт-Петербург
24 декабря 2020, 10:01
Конструкторы делайте public. Вдруг у кого программа работает, а валидацию не проходит...
+1
Игорь 16 уровень
21 декабря 2020, 16:44
просидел над задачей часа четыре, решил со второй попытки, никак не мог понять работу конструктора, но ГУГЛ ЗНАЕТ ВСЕ,
конструкторы базовых классов
обязательно для прочтения.
+4
Benzoleum Бит в Байте
22 декабря 2020, 16:39
Спасибо за ссылку, уже забыл все напрочь
0
Игорь 16 уровень
23 декабря 2020, 21:24
у меня так-же, мозг получает колосальный объём инфы и он просто не справляется все запоминать, по этому ГУГЛ это просто мой спаситель. :)
0
Alexander Lapshin 18 уровень, Череповец
24 ноября 2020, 18:45
Задача приятная, делал минут 20, забыл поменять область видимости классов авторов
Если идти по тз, должно получиться
0
Алексей 22 уровень, Зима
24 ноября 2020, 13:09
Хорошая задача. Пришлось пару часиков, с перерывом на ужин, повозиться.
0
lavisa 18 уровень, Москва
20 ноября 2020, 19:25
Мне кажется, эта задача из меня всю душу вытрясла :)
0
staffsterr 24 уровень
11 ноября 2020, 16:01
Получается при вызове toString() для объекта дочернего класса:
1) вызывается базовый метод toString(),
2) в который помещается результат из getOutputByBookType(),
Вопрос: как в самом методе getOutputByBookType() осуществляется вызов getBook() нашего дочернего класса? Ведь в базовом классе он абстрактен. Получается мы неявно передаём объект в методы базового класса, верно?
0
Дмитрий 17 уровень, Санкт-Петербург
27 декабря 2020, 12:10
В классе наследнике мы переопределяем этот метод. Метод срабатывает тот, который определен в классе объекта
0