抽象方法
抽象方法就像是存在于父类中的蓝图, 本身并没有任何实现细节. 子类或接口有责任去实现它们. 抽象类的抽象方法是为了强制子类按照规定的格式重写方法, 方便团队协作
抽象类
抽象类就是从子类中发现公共部分而形成的一种泛化.
抽象类命名要使用 Abstract 或 Base 开头,这是条开发规约,真正做到名如其意。
抽象类的应用场景
抽象类提供了一种机制, 使得我们可以定义一个类的骨架, 而不必关心具体的实现细节.
-
我想为子类提供一些直接可用的属性和功能, 但我又不想被创建实例.
-
抽象类既可以为子类提供一些通用的方法(非抽象方法), 从而减少子类代码重复; 又可以设置抽象方法, 允许子类各自定制该方法, 保证了灵活性.
接口
接口是对行为的抽象.
若接口存在继承链, 则其实现类必须实现"祖宗"们的全部抽象方法
接口的应用场景
- 为不同类族的类提供一个相同的行为规范
我们拿接口Comparable来做例子. 比较(CompareTo) 这种行为很难界定适用的类族, 实际上, 几乎所有的类都可以比较. 比如 数字类可以比较大小, 人类可以比较财富, 动物可以比较体重等. 所以各种类都可以实现这个比较接口.
抽象类和接口的区别?
抽象类是对事物的抽象, 接口是对行为的抽象. 抽象类强调"is-a"关系, 接口强调"can-do"关系(查看java源代码可以发现很多接口都是以-able作后缀).
抽象类中抽象方法参数仅限于继承关系中的子类, 而接口的方法参数并没有限制. 比如拉货这一方法, 马可以拉货, 车也可以拉货, 但是这个方法却并不适合写成抽象方法, 因为马和车不太可能去继承同一个抽象类, 也就是两者不是同一类族, 因此更适合定义成接口.