ΠΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ :
[Tom Sawyer was written by Mark Twain, Agatha Christie: Hercule Poirot is a detective]
Π ΡΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?
package com.javarush.task.task15.task1504;
import java.util.LinkedList;
import java.util.List;
/**
* ΠΠΠ - ΠΊΠ½ΠΈΠ³ΠΈ
* 1. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ public static ΠΊΠ»Π°ΡΡ MarkTwainBook, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ Book. ΠΠΌΡ Π°Π²ΡΠΎΡΠ° [Mark Twain].
* ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ (title).
* 2. Π ΠΊΠ»Π°ΡΡΠ΅ MarkTwainBook ΡΠ΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ Π²ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
* 3. ΠΠ»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° getBook ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ.
* 4. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ AgathaChristieBook. ΠΠΌΡ Π°Π²ΡΠΎΡΠ° [Agatha Christie].
* 5. Π ΠΊΠ»Π°ΡΡΠ΅ Book ΡΠ΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΠ΅Π»ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° getOutputByBookType ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»:
* 5.1. agathaChristieOutput Π΄Π»Ρ ΠΊΠ½ΠΈΠ³ ΠΠ³Π°ΡΡ ΠΡΠΈΡΡΠΈ;
* 5.2. markTwainOutput Π΄Π»Ρ ΠΊΠ½ΠΈΠ³ ΠΠ°ΡΠΊΠ° Π’Π²Π΅Π½Π°.
* <p>
* <p>
* Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
* 1. ΠΠ»Π°ΡΡ Solution Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ public static ΠΊΠ»Π°ΡΡ MarkTwainBook.
* 2. ΠΠ»Π°ΡΡ MarkTwainBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Book.
* 3. Π ΠΊΠ»Π°ΡΡΠ΅ MarkTwainBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΈΠΏΠ° String (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ).
* 4. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° MarkTwainBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠ΅Π΄ΠΊΠ° (Book) Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ "Mark Twain".
* 5. ΠΠ΅ΡΠΎΠ΄ getBook Π² ΠΊΠ»Π°ΡΡΠ΅ MarkTwainBook Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ MarkTwainBook ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
* 6. ΠΠ»Π°ΡΡ Solution Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ public static ΠΊΠ»Π°ΡΡ AgathaChristieBook.
* 7. ΠΠ»Π°ΡΡ AgathaChristieBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Book.
* 8. Π ΠΊΠ»Π°ΡΡΠ΅ AgathaChristieBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΈΠΏΠ° String (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ).
* 9. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° AgathaChristieBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠ΅Π΄ΠΊΠ° (Book) Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ "Agatha Christie".
* 10. ΠΠ΅ΡΠΎΠ΄ getBook Π² ΠΊΠ»Π°ΡΡΠ΅ AgathaChristieBook Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ AgathaChristieBook ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
* 11. ΠΠ΅ΡΠΎΠ΄ getTitle Π² ΠΊΠ»Π°ΡΡΠ°Ρ
AgathaChristieBook ΠΈ MarkTwainBook Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.
* 12. ΠΠ΅ΡΠΎΠ΄ getOutputByBookType Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° AgathaChristieBook.
* 13. ΠΠ΅ΡΠΎΠ΄ getOutputByBookType Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° MarkTwainBook.
* 14. Π ΠΊΠ»Π°ΡΡΠ΅ MarkTwainBook Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΠΎΠ»Π΅ title ΡΠΈΠΏΠ° String (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ).
* 15. Π ΠΊΠ»Π°ΡΡΠ΅ AgathaChristieBook Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΠΎΠ»Π΅ title ΡΠΈΠΏΠ° String (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ).
* ΠΠΠ - ΠΊΠ½ΠΈΠ³ΠΈ
*/
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 (this instanceof MarkTwainBook) {
return markTwainOutput;
}
if (this instanceof AgathaChristieBook) {
return agathaChristieOutput;
}
return output;
}
public String toString() {
return getOutputByBookType();
}
}
public static class MarkTwainBook extends Book {
private String title;
public MarkTwainBook(String title) {
super("Mark Twain");
this.title = title;
}
@Override
public Book getBook() {
return this;
}
@Override
public String getTitle() {
return title;
}
@Override
public String toString() {
return super.toString();
}
}
public static class AgathaChristieBook extends Book {
private String title;
public AgathaChristieBook(String title) {
super("Agatha Christie");
this.title = title;
}
@Override
public Book getBook() {
return this;
}
@Override
public String getTitle() {
return title;
}
@Override
public String toString() {
return super.toString();
}
}
}