抽象类与接口
一、抽象类的特点
- 使用extends 关键字
- 抽象类是由子类具有相同的一类特征抽象而来,也可以说是其基类或父类
- 抽象方法必须为public或protected,默认为public
- 抽象类不能用来创建对象
- 抽象方法必须由子类来实现
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法;如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类
二、接口的特点
- 使用implements关键字
- 接口中所有方法访问权限自动被声明为public
- 实现接口的非抽象类必须实现接口中所有方法
- 接口不能创建对象,但可以声明一个接口变量,方便调用
- Java为保证数据安全性不支持多继承,一个类只能有一个父类但可以同时实现多个接口,弥补了抽象类不能多继承的缺陷
三、抽象类和接口区别
抽象层次不同
抽象类是对整个类整体进行抽象,包括属性、行为;接口对类局部行为进行抽象跨域不同
抽象类所跨域的是具有相似特点的类;接口可以跨域不同的类抽象类体现继承关系,考虑的是子类和父类“是不是”同一类的关系;接口不要求实现的类与接口是同一本质,它们之间只存在“有没有这个能力”的关系
设计层次不同
抽象类是自下而上的设计,在子类中重复出现的工作,抽象到抽象类中;接口是自上而下,定义行为和规范