Can someone describe the difference between abstract classes and interfaces?
Abstract classes can have non-abstract methods that subclasses can inherit and use. Interfaces contain only method headers that a class that implements the interface MUST have.
Well, technically, Java 8 introduced "default methods" (see: https://dzone.com/articles/interface-default-methods-java), so interfaces can have some actual code in them, but it's much more restricted than abstract classes. Interfaces still can't have non-final data fields, but abstract classes can.
Both of them can be used for reused code. Abstract class can have field, .. and others things inside, which interface can't have. Moreover, You only can entends one class, but as many as interface you want.
Interfaces aren't as good for code re-use (although there is some possibility for that, thanks to the "default methods" added in Java 8). Interfaces are mainly helpful for supporting polymorphism.