JetBrains Academy: Polymorphism - Kamil-Jankowski/Learning-JAVA GitHub Wiki

JetBrains Academy: Polymorphism

Publication and its subclasses:

You are given four classes — Publication, Newspaper, Article and Announcement. You need to override methods getType() and getDetails() in classes inherited from the class Publication.

Then you need to implement getInfo() in the class Publication using getType() and getDetails(). The method should return a String with a type of publication in the first place, then details in round brackets and the title after a colon. Examples are shown below:

Sample Input 1: Publication; The new era Sample Output 1: Publication: The new era

Sample Input 2: Newspaper; Football results; Sport news Sample Output 2: Newspaper (source - Sport news): Football results

Sample Input 3: Article; Why the Sun is hot; Dr James Smith Sample Output 3: Article (author - Dr James Smith): Why the Sun is hot

Sample Input 4: Announcement; Will sell a house; 30 Sample Output 4: Announcement (days to expire - 30): Will sell a house

class Publication {

    private String title;

    public Publication(String title) {
        this.title = title;
    }

    public final String getInfo() {
        return this.getType() + this.getDetails();
    }

    public String getType() {
        return "Publication";
    }

    public String getDetails() {
        return ": " + title;
    }
}

class Newspaper extends Publication {

    private String source;

    public Newspaper(String title, String source) {
        super(title);
        this.source = source;
    }
    @ Override
    public String getType() {
        return "Newspaper";
    }
    @ Override
    public String getDetails() {
        return " (source - "+source+")" + super.getDetails();
    }
}

class Article extends Publication {

    private String author;

    public Article(String title, String author) {
        super(title);
        this.author = author;
    }
    @ Override
    public String getType() {
        return "Article";
    }
    @ Override
    public String getDetails() {
        return " (author - "+author+")" + super.getDetails();
    }
}

class Announcement extends Publication {

    private int daysToExpire;

    public Announcement(String title, int daysToExpire) {
        super(title);
        this.daysToExpire = daysToExpire;
    }
    @ Override
    public String getType() {
        return "Announcement";
    }
    @ Override
    public String getDetails() {
        return " (days to expire - "+daysToExpire+")" + super.getDetails();
    }
}