一、抽象类: abstract
1:抽象类中不一定包含抽象方法,包含抽象方法的类一定是抽象类。抽象类中既可以有抽象方法,也可以有普通方法。
2:定义为抽象的类不能被实例化。
3:继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。这些方法的访问控制必须和父类中一样(或者更为宽松)
4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
抽象类的细节:
1:抽象类中是否有构造函数?有,用于给子类对象进行初始化。
2:抽象关键字abstract和哪些不可以共存?final , private , static
二、接 口
1:使用interface来修饰,接口中的抽象方法不能用abstract这个关键字来修饰(原因:在抽象类里用关键字abstract目的是为了区分抽象方法和普通方法,在接口中所有的方法都是抽象方法,就没有必要使用关键字abstract来修饰)
2:抽象类是特殊的类,接口是特殊的抽象类(接口里面的方法全部是抽象方法)。
3:接口是一堆方法的说明,接口中的属性不能含有变量,只能用常量
4:类与接口之间实现关系,用implements ,可以多实现,接口之间用逗号隔开。
5:接口与接口之间继承关系,用extends;可以多继承
6:接口就是供组装成类用的,方法最小权限是共有(public)
继承单接口:
继承多接口
接口和抽象类的共同点:
1.都包括抽象方法
2.都不能直接实例化
3.抽象类和接口都是定义了一种规范,子类必须实现父类的抽象方法
抽象类和接口的区别:
1:抽象类只能被继承,而且只能单继承。
接口需要被实现,而且可以多实现。
2:抽象类中可以定义非抽象方法,子类可以直接继承使用。
接口中都有抽象方法,需要子类去实现。
3:抽象类的成员修饰符可以自定义。
接口中的成员修饰符是固定的。全都是public的。