title: What are the differences between abstract classes and interfaces in Java 8?
body: <p>In Java there used to be a subtle but important difference between abstract classes and interfaces: <a href="https://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-class">default implementations</a>. Abstract classes could have them, interfaces could not. Java 8 though introduces default implementations for interfaces, meaning this is no longer the critical difference between an interface and an abstract class.</p>
  
  <p>So what is?</p>
  
  <p>As best as I can tell, the only remaining difference (besides perhaps some under the hood efficiency stuff) is that abstract classes follow traditional Java single-inheritance, whereas interfaces can have multiple-inheritance (or multiple-implementation if you will). This leads me to another question - </p>
  
  <p>How do the new Java 8 interfaces avoid the <a href="http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem" rel="noreferrer">diamond Problem</a>?</p>