这是我参与「第五届青训营 」笔记创作活动的第1天
抽象类和接口同时满足需求时尽量使用接口(灵活度更高)
抽象类可以通过构造器限定子类的构造行为
java8之后接口可以定义静态属性以及使用default实现默认方法,目的:如果原有接口新增方法,会影响之前写好的继承了此接口的子类,如果不实现新的方法这会编译失败,为保证向下兼容提出default实现默认方法
什么时候使用抽象类:需要子类继承成员变量获知控制子类实例化方式时使用抽象类,否则使用接口
抽象类小结:
- 抽象类和抽象方法都必须用abstract修饰符来修饰,抽象方法不能有方法体
- 抽象类有构造器,但不能直接被实例化,要创建对象涉及向上转型,主要是用于被其子类调用
- 抽象类中可以没有抽象方法,但是有抽象方法的类必定是抽象类
- 抽象类中可以包含静态方法
- 抽象类不能用final修饰
- 抽象类不能用private修饰
- 抽象类也是类,一样是用来继承的,接口与类才是实现关系
- 外部抽象类不能用Static修饰,但内部的抽象类可以使用static声明
- 抽象类可以继承抽象类,抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体非抽象派生类必须覆盖它们
- 抽象类可以实现接口,可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。