接口与抽象类
共同特征:
1.接口与抽象类都不能实例化,他们都位于继承的顶端,用于被其他类继承或者实现;
2.接口与抽象类都可以包含抽象方法,实现或者继承他们的那些子类必须都实现这些抽象方法;
差别:
接口 | 抽象类 |
---|---|
接口体现了一种规范,接口提供了对外服务的一些方法,当一个程序实现接口时,接口时多个模块间的耦合标准,当多个程序实现接口时,接口是多个程序之间的通信标准 | 抽象类则体现的是一种模板式设计,抽象类可以看做是一个中间产品,该产品已经实现了部分功能,但仍然不能作为最终产品,需要更进一步的完善 |
只可以定义静态常量 | 既可以定义普通变量,也可以定义静态常量 |
不能有初始化块 | 可以有初始化块 |
不能有构造器 | 可以有构造器,但不是用于创建对象,而是让子类调用完成其初始化的 |
不能有静态方法 | 可以有静态方法 |
只能有抽象方法 | 除了抽象方法,还可以有普通方法 |
一个类可以实现多个接口 | 一个类只能继承一个父抽象类 |
注:接口可以多继承接口
abstract不能和final一起使用,并且不可以修饰变量和构造器,abstract不能和static一起使用共同修饰方法(static修饰的方法为类方法,类调用一个没有方法体的方法肯定会引起错误),abstract不可以和private一起使用(因为abstract修饰的方法只有被重写才有意义)