interface vs abstract class java
an abstract class can have abstract and non-abstract instance methods while an interface can have abstract or default instance methods; an abstract class can extend another abstract or regular class and an interface can only extend another interface; an abstract class can extend only one class while an interface can extend any number of interfaces; an abstract class can have final, non-final, static, non-static variables (regular fields) while an interface can only have static final variables; an abstract class can provide an implementation of an interface but an interface cannot provide an implementation of an abstract class; an abstract class can have a constructor and an interface cannot; in an abstract class, the keyword abstract is mandatory to declare a method as an abstract one while in an interface this keyword is optional.