抽象类与接口的主要区别:
抽象类是不完整的类,包含抽象方法和非抽象方法,可以拥有构造方法、字段、静态和非静态方法等。子类继承抽象类时,必须实现抽象类中定义的所有抽象方法。
接口是一种特殊的类,只包含抽象方法(在Java 8及以后版本中,接口可以包含默认方法和静态方法),不能拥有构造方法、字段等。实现接口的类必须实现接口中定义的所有方法。
选择使用抽象类还是接口:
如果需要定义一组公共的方法和属性,并且这些方法和属性可以被子类继承和实现,那么应该使用抽象类。
如果需要实现多继承、插件开发、回调函数、规范和约束或单元测试等应用场景,那么应该使用接口。