Различия между абстрактными классами и интерфейсами

Java < 8 abstract interface
Может содержать абстрактные методы + +
Можно создать экземпляр
Наследник может быть абстрактным +
Может содержать внутренние классы + +
Может содержать неабстрактные методы + +
Может содержать константы + +
Может содержать методы по умолчанию
Может содержать статические методы +

Для Java, начиная с версии 8 добавились возможности в интерфейсы

Java 8 abstract interface
Может содержать абстрактные методы + +
Можно создать экземпляр
Наследник может быть абстрактным +
Может содержать внутренние классы + +
Может содержать неабстрактные методы + +
Может содержать методы по умолчанию +
Может содержать статические методы + +

Default метод в интерфейсе — это метод в интерфейсе с по умолчанию реализованной логикой, который не требуется обязательно определять в реализации этого интерфейса. Что касается интерфейса, то в нем находятся только абстрактные методы и константы, так было до выхода Java 8. Начиная с Java 8 кроме абстрактных методов мы также можем использовать в интерфейсах стандартные методы (default methods) и статические методы (static methods).

При реализации интерфейса, класс обязан реализовать все методы интерфейса. Иначе класс должен быть помечен как абстрактный.