在大家了解了继承以后,都知道了继承的特点。
1:单一继承(一个儿子只能有一个亲爹)
2:多层继承(儿子继承亲爹,亲爹继承爷爷)
因此,继承的缺点也就显而易见了。Java语言的继承是单一继承!!
于是乎,Java语言为了解决单一继承问题,给我们提供了一种机制用来解决该问题-------接口
接口
接口是一个比抽象类还要抽象的类,它里面的所有方法都是抽象方法,且只含有常量和抽象方法,可以称它是抽象方法与常量值的集合
接口所用的关键字interface
接口与类的关系是实现关系,不是继承,这是我们又有了一个关键字implements(实现),详细用法下面会讲
重点!!!定义接口类的格式 interface 接口名{
[方法体]
}
接下来,我们来用一个例子来帮大家深入理解(比尔盖茨例)
需求:比尔盖茨既是一个程序员,又是一位老板,身为程序员有敲代码的方法,身为老板有管理的方法,现在我们应该如何做,来实现这两个方法呢?
分析:由需求我们不难想到创建一个比尔盖茨类,一个程序员类,一个老板类,让他既可以由程序员类里的方法,又可以有老板类里面的方法。怎么做?继承?可是要有两个类里的方法呢。那么我们就想到了我们可以继承一个类,再去实现另一个类,即我们的接口。
代码如下
//main方法类public class jichengDemo {public static void main(String [] args){ //创建对象BillGates gates = new BillGates(); //敲代码方法gates.code(); //管理方法gates.manage();}}//定义老板类(作为接口) interface Boss{ //抽象方法!! //管理方法public void manage();}//定义程序员类(作为父类)class Programmer { //敲代码方法public void code(){System.out.println("敲代码");}}//定义比尔盖茨类(作为子类)class BillGates extends Programmer implements Boss{ //重写接口类的抽象方法(必须!!)public void manage(){System.out.println("管理");}}
//结果敲代码管理
这是我们便完成了需求。
当然我们也可以把程序员类也定义为接口,这便是接口的多实现特征
代码如下
public class jichengDemo1 {public static void main(String [] args){BillGates gates = new BillGates();gates.code();gates.manage();}}interface Boss{public void manage();}interface Programmer {public void code();}//实现多接口class BillGates implements Boss,Programmer{public void manage(){System.out.println("管理");} public void code(){ System.out.println("敲代码"); }}
多实现定义格式 class BillGates implements Manager,Programmer{[方法体]}
现在,我们已经基本了解了接口的使用,接下来我们聊聊接口的成员特点
①接口里面的方法只能是抽象方法
②抽象方法默认使用public abstract 关键字修饰 (这两个关键字可以不写,但是强烈建议在实际开发的过程中写上,要不然会产生云里雾里的感觉)
③接口里面只能有常量,不能有变量
interface People{ public static final int NUM = 10;}
④接口里面常量默认使用public static final关键字修饰
因为使用了static 关键字的缘故,我们可以用类名调用上面People的常量
System.out.pritnln(People.NUM);
结果
10
学会了接口,我们还要了解一下接口与类之间的各种关系
1:类与类之间的关系(继承关系) 单一继承和多层继承
2:接口与接口之间的关系(继承关系)多继承,且不需要重写父类接口的抽象方法,具体读者自行书写,这里不演示了
//接口的多继承interface a{}interface b{}interface interc extends intera,interb{}
3:接口与类之间的关系(实现关系)多实现(一个儿子可以有无数个干爹)
最后我们来讲一下接口的优点(欢迎补充!!)
1:类与接口之间的多实现关系打破了继承的局限性
2:接口对外提供了规则
3:降低了程序的耦合性(可以实现模块化开发,定义好规则每个人实现自己的模块,提高了开发效率)
希望读者看到这篇文章能够有所启发,希望能帮到大家,谢谢!!! /手动狗头emoji