ООП - книги

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