抽象类
- 抽象类不能被实例化
- 抽象类里包含抽象方法,也可以有非抽象方法。
- abstract 不能与final一同修饰一个类
- abstract 不能与final, static, private, native一同修斯一个方法
接口
- 接口中定义的成员变量自动默认为
public static final
,可以直接通过类名.变量名
来调用 - 接口中的方法自动为
public
,因为接口必须要能被实现 - 接口中不存在有具体方法体的方法。
- 一个类要实现某接口,必须要实现这个接口中所有的方法。如果只实现了一部分方法,则这个类必须要声明为抽象类。
抽象类 vs 接口
- 语法层次比较
抽象类是个类,遵循单继承的原则,而一个类可以实现多个接口。 - 设计层次理解
- 抽象类理解为
is-a
的关系,接口理解为like-a
的关系,实现的是有没有某个行为
的关系。 - 抽象类是多个子类向上抽象出来的,它们具有相同的特征,可以用一个基类来表示;而接口是行为上的抽象,是多个类具有相关的行为。比如:猫和狗向上可以抽象为动物的抽象类,猫和狗都
是一个
动物,它们有自己玩球的姿势。而机器人也会玩球(比如发条魔灵),那么可以统一抽象出一个接口玩儿个球
,本质上动物和机器人属于不同的类别,但它们都有自己玩球的行为。
网友评论