title: Why use abstract class and not interface?
body: <p>For example a real estate builder is constructing an apartment with many flats. All the rooms in the flats have the same design, except the bedroom. The bedroom design is left for the people who would own the flats i.e; the bed Rooms can be of different designs for different flats.</p>
  
  <p>I can achieve this through an <code>abstract</code> class like below:</p>
  
  <pre><code>public abstract class Flat
  {
      //some properties
  
      public void livingRoom(){
         //some code
      }
  
      public void kitchen(){
         //some code
      }
  
      public abstract void bedRoom();
  
      }
  }
  </code></pre>
  
  <p>An <code>implementation</code> class would be as follows:</p>
  
  <pre><code>public class Flat101 extends Flat
  {
      public void bedRoom() {
          System.out.println("This flat has a customized bedroom");
     }        
  
  }
  </code></pre>
  
  <p>Alternatively I can use an <code>interface</code> instead of an <code>abstract</code> class to achieve the same purpose like follows:</p>
  
  <pre><code>class Flat
  {
    public void livingRoom(){ 
         System.out.println("This flat has a living room");
    }
  
    public void kitchen(){
       System.out.println("This flat has a kitchen");
    } 
  }
  
  interface BedRoomInterface
  {
    public abstract void bedRoom();
  }
  
  public class Flat101 extends Flat implements BedRoomInterface
  {
     public void bedRoom() {
      System.out.println("This flat has a customized bedroom");
     }
  }
  </code></pre>
  
  <p>Now the question is : For this why should choose to use an <code>interface</code> (or) why should I choose to use an <code>abstract</code> class?</p>