title: Is is good practice to add a dummy method into a superclass so the subclass can override it?
body: <p>I have a problem. It stems from calling a subclass method from a superclass, but with a twist. Any insight would be greatly appreciated.</p>
  
  <p>For example let's say I have a subclass <code>MultipleChoice</code> that extends an abstract superclass <code>Question</code>. The class <code>MultipleChoice</code> has a method <code>addChoice(String choice)</code>, while <code>Question</code> does everything any question should do, like display the question prompt, and check for the correct answer.</p>
  
  <p>I'd like to create an instance of <code>MultipleChoice</code> that references <code>Question</code>, and then call the <code>addChoice(String choice)</code> method. The reason for this is because I'd like to create a list of questions, and then put different types of questions in there (e.g. multiple choice, true and false, etc.). </p>
  
  <p>Something like this:</p>
  
  <pre><code>ArrayList&lt;Question&gt; list = new ArrayList();
  list.add(new MultipleChoice()); //this is valid
  list.get(0).addChoice("abc");
  list.get(0).addChoice("xyz"); //etc
  </code></pre>
  
  <p>However, this of course is a compile error, since not every question is a multiple choice type of question.</p>
  
  <p>I know of two solutions for this.</p>
  
  <ol>
  <li>Typecast: <code>((MultipleChoice)list.get(0)).addChoice("abc");</code></li>
  <li>Add the method <code>addChoice(String choice)</code> into the superclass <code>Question</code>, so it can be overridden by <code>MultiplceChoice</code>.</li>
  </ol>
  
  <p>Since I'm going to be accessing <code>list</code> many times, option 1 is well... ugly, while option 2 just seems to really poor practice, especially since <code>Question</code> is abstract.</p>
  
  <p>How can I approach this elegantly?</p>