6.1 接口与实现
为了克服java单继承的缺点,java使用了接口,一个类可以实现多个接口
使用关键字interface来定义一个接口,接口的定义和类的定义很相似,分为接口的声明和接口体
1、接口声明
用关键字interface来声明
格式:interface+接口名
2、接口体
接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以方法的定义没有方法体,且用分号结尾
接口的变量和方法的构成规则
接口中的变量自动都是public、static、final,
接口中的方法默认为public abstract;接口也产生class文件
接口中的方法不能被static和final修饰,因为要重写所有接口中的方法
接口中没有构造函数,方法可以抛出异常
6.2 实现接口
一个类通过使用关键字implements声明自己实现一个或多个接口
如:class A implements Printable, Addable
如果一个类实现了某个接口,那么这个类必须要重写该接口的所有方法
接口可以通过继承产生新的接口
java提供的接口都在相应的包中,通过import语句不仅可以引入包中的类,也可以引入包中的接口
6.3 接口的UML图
接口UML图
实现接口的UML图
6.4 接口回调
接口回调:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法
6.5 理解接口
1、接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示
2、可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。
接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容(方法体的内容)可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(方法绑定)。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类
6.6 接口与多态
可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调实现接口方法
6.7 接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法
6.8 abstract类与接口的比较
1、abstract类和接口都可以有abstract方法
2、接口中只可以有常量,不能有变量;而abstract类中既可以有常量也可以有变量
3、abstract类中也可以有非abstract方法,接口不可用
6.9 面向接口编程
面向接口去设计程序,可以通过在接口中声明若干个abstract方法,表面这些方法的重要性,方法体的内容细节由实现接口的类去完成。
使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法
6.10 总结
接口的接口体中只可以有常量和abstract方法,和类一样,接口也是java中的一种重要的引用型数据类型,当接口变量中存放了实现接口的类的对象的引用后,接口变量就可以调用类实现的接口方法,这一过程被称为接口回调
和子类体现多态类似,有接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式,在使用多态设计程序时,要熟练使用接口回调技术以及面向接口编程的思想,以便体现程序设计所提倡的“开-闭”原则