What is the difference abstract class interface Java?
All depends on the concept of "type". In the old days, that is, during the language Simula, which was inspired by the creators of C++ were just classes. And class-based type system. Moreover, the mechanism of inheritance was carried out as implemented, only to save memory, which in those days was very expensive.
To achieve polymorphism, we must have the ability to declare abstract types. They say "any crap which is of such a type will work as it should". Because in languages like C++ abstract classes appeared. Because sometimes we want to make a composition of abstract types in C++ implemented multiple inheritance.
In Java, which largely drew inspiration from C++ and smalltalk, decided to introduce one more entity interfaces. It was sort of a simplified way to define an abstract base type. In the end not to solve the problem of diamond (or rhombus) of multiple inheritance was abandoned and to allow the classes to implementing multiple interfaces.
Due to this we are able to do composition types as we want. That is the whole difference boils down to the fact that when you inherit from an abstract class, we are inheriting the classes, while interfaces allow our classes to implementing abstract types.
In General, abstract classes need when you need inheritance. This is usually in situations where you have several classes that should have a common abstract type (i.e. you can't select the weakest on the limitations of the ancestor). For example, if we make a chain of class String <- Email, then there is no point in abstract classes since the String already includes a subset of the types of Email.
In General in Java 8 at already introduced interfaces have a default implementation so don't be surprised if over time from the keyword extends, in principle, refuse, getting rid of unnecessary entities.
So I recommend you to read: www.javaworld.com/article/2073649/core-java/why-ex...