前言
接口的概念和抽象类很像,不同的地方是:
1,接口不允许有实例字段(对象中的数据称之为实例字段),而抽象类中允许有;
2,接口中只能允许有抽象方法和全局常量;(全局常量就是由 public static final 修饰的属性)
接口语法
定义格式:
interface 接口名称{
全局常量;
抽象方法;
}
因为接口里面全部是抽象的方法,所以需要依赖自己的”子“来实现,这个”子“就是接口的实现类;
接口的实现implements
定义格式:
class 子类 implements 父接口1,父接口2...{
}
如果一个子类要继承父类,又要实现接口的话,格式为下:
class 子类 extends 父类 implement 父接口1,父接口2...{
}
从这里可以看出接口可以多实现,一个子类可以有多个父接口。
注意的是:
子类如果是抽象的话,可以不全部实现接口的所有方法。
子类如果是非抽象的话,就需要实现接口所有方法。
写到这里,就要提出一个概念:面向接口的编程思想。
之前我们经历了面向过程编程思想,面向对象编程思想,现在思维可以更加提高一层:面向接口编程思想。
面向接口关注的是抽象的部分,我们在描述一个项目的时候,是由多个模块组成,我们在写之前,通过抽象的部分把项目的规范、约束提前定义出来,从宏观角度把这个项目设计出来,但是流程中没有一行实现的代码。
这样可以降低模块之间的耦合性,易于项目的升级(把需要更改的模块单独领出来修改,而不影响程序出bug),利于维护和扩展。
建议在写代码时,先写接口。
我们来看一组代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LkYWVNZ-1632799223360)(D:\typora\FILE\图片\QQ图片20210920173639.png)]
报错是因为接口中只能有抽象方法;
简写:
- public static final 可以省略,因为接口中只能有全局常量;
- 修饰方法的public关键字也可以省略,因为接口需要被实现,方法全是public方法;
接口的继承
除此之外,接口还可以多继承接口:
interface C extends A,B{
}
接口和抽象类的区别
- 抽象类被子类继承,接口被类实现;
- 接口只能声明抽象方法,而抽象类可以部分抽象方法;
- 接口定义的变量只能是全局常量,抽象类中是普通变量;
- 抽象类无法多继承,接口可以;
- 抽象类包含static方法,而接口不可以(因为静态方法不能被子类重写)
- 接口不能有构造方法,抽象类可以有;
常量,抽象类中是普通变量;
4. 抽象类无法多继承,接口可以;
5. 抽象类包含static方法,而接口不可以(因为静态方法不能被子类重写)
6. 接口不能有构造方法,抽象类可以有;