Java面向对象之——接口;摸清楚接口和抽象类的区别

前言

接口的概念和抽象类很像,不同的地方是:

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)]

报错是因为接口中只能有抽象方法;

简写:

  1. public static final 可以省略,因为接口中只能有全局常量;
  2. 修饰方法的public关键字也可以省略,因为接口需要被实现,方法全是public方法;

接口的继承

除此之外,接口还可以多继承接口:

interface C extends A,B{

}

接口和抽象类的区别

  1. 抽象类被子类继承,接口被类实现;
  2. 接口只能声明抽象方法,而抽象类可以部分抽象方法;
  3. 接口定义的变量只能是全局常量,抽象类中是普通变量;
  4. 抽象类无法多继承,接口可以;
  5. 抽象类包含static方法,而接口不可以(因为静态方法不能被子类重写)
  6. 接口不能有构造方法,抽象类可以有;

常量,抽象类中是普通变量;
4. 抽象类无法多继承,接口可以;
5. 抽象类包含static方法,而接口不可以(因为静态方法不能被子类重写)
6. 接口不能有构造方法,抽象类可以有;

猜你喜欢

转载自blog.csdn.net/m0_58702068/article/details/120525618
今日推荐