Добрый день,
Задачу решил интуитивно и долго. но не совсем понятно осталось, как все взаимосвязано и как работает.
По порядку. Тут я заполняю лист:
public static void main(String[] args) {
List<Book> books = new LinkedList<Book>();
books.add(new MarkTwainBook("Tom Sawyer"));
books.add(new AgathaChristieBook("Hercule Poirot"));
System.out.println(books);
}
Как абстрактный метод Book в этот лист добавляет строки:
String agathaChristieOutput = author + ": " + getBook().getTitle() + " is a detective";
String markTwainOutput = getBook().getTitle() + " was written by " + author;
В коде прикрепленном ниже в методе getOutputByBookType() в if я вставил не new AgathaChristieBook(output) а getBook().
Я понимаю что в метод getOutputByBookType() возвращается передананные аргументы agathaChristieOutput и markTwainOutput.
Затем метод getOutputByBookType() передается в
public String toString() {
return getOutputByBookType();
}
А toString() получается передается в Book?
Тогда ля чего тут public abstract Book getBook();?
Очень много вопросов. какую то часть я понимаю, какую то нет.
Очень буду благодарен если объясните откуда и куда все переходит, чтоб разобраться и в дальнейшем понимать детально.
Спасибо большое за то что уделили время прочитав это.package com.javarush.task.task15.task1504;
import java.util.LinkedList;
import java.util.List;
/*
ООП - книги
*/
public class Solution {
public static void main(String[] args) {
List<Book> books = new LinkedList<Book>();
books.add(new MarkTwainBook("Tom Sawyer"));
books.add(new AgathaChristieBook("Hercule Poirot"));
System.out.println(books);
}
abstract static class Book {
private String author;
public Book(String author) {
this.author = author;
}
public abstract Book getBook();
public abstract String getTitle();
private String getOutputByBookType() {
String agathaChristieOutput = author + ": " + getBook().getTitle() + " is a detective";
String markTwainOutput = getBook().getTitle() + " was written by " + author;
String output = "output";
if (new AgathaChristieBook(output) instanceof AgathaChristieBook)
return agathaChristieOutput;
if (new MarkTwainBook(getBook().getTitle()) instanceof MarkTwainBook)
return markTwainOutput;
else
//Add your code here
return output;
}
public String toString() {
return getOutputByBookType();
}
}
public static class MarkTwainBook extends Book{
String title ;
public MarkTwainBook(String title) {
super("Mark Twain");
this.title = title;
}
@Override
public MarkTwainBook getBook() {
return this;
}
@Override
public String getTitle() {
return this.title;
}
}
public static class AgathaChristieBook extends Book{
String title;
public AgathaChristieBook(String title) {
super("Agatha Christie");
this.title = title;
}
@Override
public AgathaChristieBook getBook() {
return this;
}
@Override
public String getTitle() {
return this.title;
}
}
}