Как решить эту задачу? Ниже тот код, который я смог написать. Еще не совсем понятно как метод
private String getOutputByBookType()
должен понимать объект какого класса его вызывает?
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";

            return output;
        }

        public String toString() {
            return getOutputByBookType();
        }
    }
    public static class MarkTwainBook extends Book{
        public String title;
        public MarkTwainBook(String title){
            super("MarkTwain");
        }
        public Book getBook(){
            return new MarkTwainBook(title);
        }

        @Override
        public String getTitle() {
            return title;
        }
    }
}