title: Why force ourselves to implement abstract methods in concrete subclasses, if we can use empty concrete methods instead?
body: <p>After making an abstract superclass, when you get to the first concrete subclass, you've got to implement all your abstract methods, even if some of those methods aren't going to be used in that concrete class. SO! Why doesn't an abstract superclass just make those abstract methods into "fake" methods, like: </p>
  
  <pre><code>public void doThis() { 
       if (1 &lt; 0){ 
            int x = 34
       }
  }
  </code></pre>
  
  <p>it does nothing, since 1 is never less than 0. And then when you get to your concrete subclass, you don't have to implement ALL those abstract methods, but for the ones that you WANT to implement you can just rewrite into a method you need it to be:</p>
  
  <pre><code>public void doThis() {
        //does "this".
  }
  </code></pre>
  
  <p>Both ways would allow for polymorphism, right? So what are the real advantages of abstract methods that I'm missing?</p>
  
  <p>Thanks!</p>