1、注意事项注意事项:当前课件文件必须和提供的源代码文件夹当前课件文件必须和提供的源代码文件夹“代码代码”在同一目录中即不要移动文件夹在同一目录中即不要移动文件夹“代码代码”的默认位置的默认位置第章第章 接口与实现接口与实现 配合例子源代码一起使用课件制作人 张跃平 导读导读主要内容主要内容接口接口实现接口实现接口理解接口理解接口接口回调接口回调接口与多态接口与多态接口变量做参数接口变量做参数面向接口编程面向接口编程重点和难点重点和难点重点:接口的理解;抽象类和接口的区别。重点:接口的理解;抽象类和接口的区别。难点:抽象类和接口的异同点难点:抽象类和接口的异同点 接口概述 不支持多重继承(子类只能
2、有一个父类)。不支持多重继承(子类只能有一个父类)。 ; () ? 接口接口 为了克服单继承的缺点,使用了接口,一个类可以实现多为了克服单继承的缺点,使用了接口,一个类可以实现多个接口。个接口。 使用关键字来定义一个接口。接口的定义和类的定义很相使用关键字来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。似,分为接口的声明和接口体。 . .接口声明接口声明 接口通过使用关键字来声明接口通过使用关键字来声明 格式:格式: 接口的名字接口的名字 . .接口体接口体 接口体中包含常量定义和方法定义两部分。接口体中只进接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不
3、许提供方法的实现,所以,方法的定义行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号没有方法体,且用分号“;”结尾。如:结尾。如: ; (); ( ); 接口的变量和方法的构成规则:接口的变量和方法的构成规则: 接口中的变量自动都是、,接口中的变量自动都是、, 接口中的方法默认为接口中的方法默认为 ;接口也产生文件。;接口也产生文件。 接口中的方法不能被和修饰,因为要重写所有接口中的方接口中的方法不能被和修饰,因为要重写所有接口中的方法。法。 接口中没有构造函数,方法可以抛出异常。接口中没有构造函数,方法可以抛出异常。 实现接口实现接口 一个类通过使用关键字声明自己实现一个
4、或多个接口。一个类通过使用关键字声明自己实现一个或多个接口。如:如: 如果一个类实现了某个接口,那么这个类必须重写该接口的如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。所有方法。 接口可以通过继承产生新的接口。接口可以通过继承产生新的接口。 提供的接口都在相应的包中,通过语句不仅可以引入包中的提供的接口都在相应的包中,通过语句不仅可以引入包中的类,也可以引入包中的接口,类,也可以引入包中的接口,例如例如 .*; 请看下面的例题请看下面的例题接口例题接口例题 例子例子()中包含有类、类和接口,而且和类都实现了接口。运中包含有类、类和接口,而且和类都实现了接口。运行效果如图。行效果
5、如图。 接口的图接口的图表示接口的图和表示类的图类似,使用一个长方形描述一个接口的主要构成,将表示接口的图和表示类的图类似,使用一个长方形描述一个接口的主要构成,将长方形垂直地分为三层。长方形垂直地分为三层。顶部第层是名字层,接口的名字必须是斜体字形,而且需要用顶部第层是名字层,接口的名字必须是斜体字形,而且需要用修饰名字,修饰名字,并且该修饰和名字分列在两行。并且该修饰和名字分列在两行。第层是常量层,列出接口中的常量及类型,格式是第层是常量层,列出接口中的常量及类型,格式是“常量名字:类型常量名字:类型”。第层是方法层,也称操作层,列出接口中的方法及返回类型,格式是第层是方法层,也称操作层,
6、列出接口中的方法及返回类型,格式是“方法名字方法名字(参数列表):类型(参数列表):类型”。 接口回调接口回调 接口回调是指:可以把实现某一接口的类创建的对象的引用接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法。例子接口方法时,就是通知相应的对象调用这个方法。例子 分析:分析: 声明接口对象声明接口对象 ()实现接口子类对象实现接口子类对象
7、; 接口回调接口回调objOx12ab9 理解接口理解接口理解的关键点是:理解的关键点是:()接口可以抽象出重要的行为标准,该行为标准用抽象方法()接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。来表示。()可以把实现接口的类的对象的引用赋值给接口变量,该接()可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。里的行为标准给出的具体行为。接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容接口的思想在于它可以要求某些类有相同名称的方法,但
8、方法的具体内容(方法体的内容)可以不同,即要求这些类实现接口,以保证这些类一定(方法体的内容)可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(即所谓的方法绑定)。接口在要求一些类有相同有接口中所声明的方法(即所谓的方法绑定)。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类。名称的方法的同时,并不强迫这些类具有相同的父类。例子中,要求类(机动车)的子类(出租车)和(公共汽车)必须有名称例子中,要求类(机动车)的子类(出租车)和(公共汽车)必须有名称为的方法(有刹车功能),但额外要求类有名字为和的方法(有空调和收为的方法(有刹车功能),但额外要求类有名字
9、为和的方法(有空调和收费功能),即要求实现两个接口,要求客车类有名字为的方法(有收费功费功能),即要求实现两个接口,要求客车类有名字为的方法(有收费功能),即要求只实现一个接口。能),即要求只实现一个接口。 接口与多态接口与多态 可以通过在接口中声明若干个方法,表明这些方法的重要性,可以通过在接口中声明若干个方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。使用接口进行程方法体的内容细节由实现接口的类去完成。使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接
10、口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。接口方法。 例子例子 接口参数接口参数 如果一个方法的参数是接口类型,我们就可以将任何实现该如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。可以回调类实现的接口方法。 例子例子 类与接口的比较类与接口的比较 接口和类的比较如下:接口和类的比较如下: 类和接口都可以有方法。类和接口都可以有方法。 接口中只可以有常量接口中只可以有常量,不能有变量;而类中即可以有常量不能有变量;而类中即可以有常量也可以有变量
11、。也可以有变量。 类中也可以有非方法类中也可以有非方法,接口不可以。接口不可以。 面向接口编程面向接口编程 面向接口去设计程序,可面向接口去设计程序,可以通过在接口中声明若干以通过在接口中声明若干个方法,表明这些方法的个方法,表明这些方法的重要性,方法体的内容细重要性,方法体的内容细节由实现接口的类去完成。节由实现接口的类去完成。 使用接口进行程序设计的使用接口进行程序设计的核心思想是使用接口回调,核心思想是使用接口回调,即接口变量存放实现该接即接口变量存放实现该接口的类的对象的引用,从口的类的对象的引用,从而接口变量就可以回调类而接口变量就可以回调类实现的接口方法。实现的接口方法。 应用举例
12、应用举例 设计一个广告牌,希望所设计的广告牌可以展示许多公司设计一个广告牌,希望所设计的广告牌可以展示许多公司的广告词。的广告词。 例子中除了主类例子中除了主类()外,还有接口及实现该接口的(白云公司)外,还有接口及实现该接口的(白云公司)和(黑土公司),以及面向接口的类(广告牌),程序运行和(黑土公司),以及面向接口的类(广告牌),程序运行效果如图。效果如图。问题的分析问题的分析设计接口设计接口设计广告牌类设计广告牌类总结总结接口的接口体中只可以有常量和方法。和类一样,接口也是中一种重要的引用型数据类型。当接口变量中存放了实现接口的类的对象的引用后,接口变量就可以调用类实现的接口方法,这一过程被称为接口回调。和子类体现多态类似,由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式。在使用多态设计程序时,要熟练使用接口回调技术以及面向接口编程的思想,以便体现程序设计所提倡的“开闭”原则。作业作业习题: 本章结束本章结束