抽象类和接口
抽象类
abstract
- 抽象方法一定在抽象类中
- 抽象类和抽象方法肯定是被abstract修饰的
- 抽象类不可以用new关键字实例化,实例化一个抽象类没有任何意义
- 如果一定要用抽象类,那么可以使用多态的方式
- 虽然抽象类不能实例化,但是也是有构造器的
- 抽象方法不能被private修饰
- 抽象方法不能被static修饰
总结:
- 抽象类就是用来被继承的
- 抽象方法就是用来被实现的
- 实现多态
接口
Interface:定义接口
Implements:实现接口
- 接口中的变量全部是静态常量
- 接口中的方法默认是公开抽象方法(public abstract),就算不写,也会自动加上public abstract
- JDK1.8之后可以手动声明默认方法和静态方法
- 接口可以多实现,一个类可以实现多个接口
- 接口与接口之间使用extends
- 一个子类可以继承一个父类,实现多个接口
抽象类和接口的区别和联系:
- 抽象类和接口都不能直接实例化。抽象类变量只能引用子类对象,接口变量只能引用实现类对象。
- 接口中只能定义抽象方法,不能定义具体方法,但在抽象类中可以定义抽象方法,可以定义具体方法。
- 接口中定义的变量是公共的静态的常量,而抽象类中定义的变量是普通属性。
- 一个类只能继承一个父类,但是可以实现多个接口。
总结:
区别:
接口 | 抽象类 |
---|
interface&Implements | abstract |
只包含抽象方法,静态方法,默认方法,不能为普通方法提供实现 | 完全包含普通方法 |
只能定义静态常量,不能定义普通成员变量 | 既可以定义普通成员变量,也可以定义静态常量 |
不包括构造器 | 可以包含构造器 |
不能包含初始代码块 | 可以包含初始代码块 |
多实现 | 单继承 |
#### 联系:
- 都不能被实例化。
- 用于实现和继承。
- 都可以包含抽象方法。
#### 区别:
1. 抽象类要被子类继承;接口要被类实现。
2. 接口只能做方法声明;抽象类中可以作为方法声明,,也可以做方法实现。
3. 接口里定义的变量只能是公共的静态的常量;抽象类中的变量是普通变量。
4. 接口是设计的结果;抽象类是重构的结果。
5. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别更高。
6. 抽象类可以有具体的方法和属性;接口只可以有抽象方法和不可变常量。
7. 抽象类主要用来抽象类别;接口主要用来抽象功能。