Problem Description
I have an abstract Paper class that contains common properties of all papers and one or more child classes of paper that add additional information for that type of paper. I then have a HashMap<String, Paper> to store multiple papers.
My application allows the user to update a paper by providing a the pid and then supplying the attributes and values to update. The issue I am having is how do I update the properties on the sub classes when all I have is the super class.
What is the best way/practice to handle this situation?
Class Structure
public abstract class Paper { String pid; String title; String author; } public class Publication extends Paper { int pages; } public class PHDThesis extends Paper { String supervisor; } My Current Attempt
This is what I currently have** and it works by using instance of; but I feel there should be a better way to do this.
import java.util.*; public class App { public static abstract class Paper { private String title; private String author; public Paper(String title, String author) { this.title = title; this.author = author; } public void update(String title, String author) { this.title = title; this.author = author; } } public static class Publication extends Paper { private int pages; public Publication(int pages, String title, String author) { super(title, author); this.pages = pages; } public void update(String title, String author, int pages) { super.update(title, author); this.pages = pages; } } public static class PHDThesis extends Paper { private String supervisor; public PHDThesis(String supervisor, String title, String author) { super(title, author); this.supervisor = supervisor; } public void update(String title, String author, String supervisor) { super.update(title, author); this.supervisor = supervisor; } } public static void main(String[] args) { HashMap<String, Paper> papers = new HashMap<String, Paper>(); papers.put("P001", new PHDThesis("My Super", "My PHD Title", "My Author")); papers.put("P002", new Publication(22, "My Pub Title", "My Author")); Paper p = papers.get("P001"); if (p instanceof PHDThesis) { ((PHDThesis)p).update("New Title", "New author", "New Super"); } else if (p instanceof Publication) { ((Publication)p).update("New Title", "New author", 33); } } } ** reduced test code, actual code is much more complex and better laid out.