一、抽象类与普通类的区别
1.抽象类不能被实例化
2.抽象类可以有构造函数
3.抽象方法只需申明,无需实现,但抽象类中可以存在抽象方法
4.抽象方法不能被private修饰
5.含有抽象方法的类必须被声明为抽象类
6.抽象类的子类必须实现抽象类中所有抽象方法,否则这个子类也必须是抽象类
7.抽象类不能被final修饰
二、抽象类与接口的区别
1.抽象类可以有默认的方法实现,而接口完全抽象,无方法实现
2.抽象类可以有构造器,接口不能
3.抽象方法可以被default、protected、public修饰,接口只能被public修饰
4.抽象类中可以存在main方法
5.抽象类比接口快
6.a. 抽象类是对一种事务的抽象,是对整个类进行抽象,包括属性,行为(方法)。接口是对行为(行为)的抽象。如果一个类继承或实现了某个抽象类,那么一定是抽象类的种类(拥有同一种属性或行为的类)。
b. 设计层面不同,抽象类作为很多子类的父类,是一种模板设计,而接口是一种规范,它是一种辐射式设计,也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象方法中添加实现,子类可以不用变更,而对于接口不行,如果接口进行了变更,那么实现它的类都需要做变更。
三、什么情况下使用接口?什么情况下使用抽象类?
1.使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
2.当2个或多个类中有重复部分的时候,我们可以抽象出来一个基类,如果希望这个基类不能被实例化,就可以把这个基类设计成抽象类。
3.当仅仅描述一组方法或规则时使用接口
参考资料:https://www.cnblogs.com/zhangpengnike/p/5798145.html