第6章接口与多态.ppt

上传人:豆**** 文档编号:60182309 上传时间:2022-11-15 格式:PPT 页数:36 大小:1.06MB
返回 下载 相关 举报
第6章接口与多态.ppt_第1页
第1页 / 共36页
第6章接口与多态.ppt_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《第6章接口与多态.ppt》由会员分享,可在线阅读,更多相关《第6章接口与多态.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第6章接口与多态 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望主要内容主要内容 接口接口 接口回调接口回调 面向接口编程面向接口编程难点难点 面向接口编程面向接口编程导学导学JavaJava不支持多继承性不支持多继承性,即一个类只能有一个父类。,即一个类只能有一个父类。单继承性使得单继承性使得JavaJava简单,易于管理和维护。简单,易于管理和维护。JavaJava的的接口更加符合人的思维方式接口更加符合人的思维方式6.1 6.1 接接 口口使用关键字使用关键

2、字interfaceinterface来定义一个接口。接口的定义来定义一个接口。接口的定义和类的定义很相似,分为和类的定义很相似,分为接口的声明接口的声明和和接口体接口体。6.1.1 6.1.1 接口的声明与使用接口的声明与使用接口通过使用关键字接口通过使用关键字interfaceinterface来声明,格式:来声明,格式:interfaceinterface 接口的名字接口的名字 1 1接口声明接口声明接口是一组接口是一组常量常量和和抽象方法抽象方法的集合。的集合。(1)(1)接口的访问权限是接口的访问权限是publicpublic或或缺省缺省权限。权限。(2)(2)接口中成员变量声明格式

3、如下:接口中成员变量声明格式如下:public static finalpublic static final 成员变量名成员变量名=常量常量接口中成员方法声明格式如下:接口中成员方法声明格式如下:public abstractpublic abstract 返回值类型返回值类型 成员方法名(参成员方法名(参 数表)数表)注意:接口中成员变量和成员方法的格式是固定的,注意:接口中成员变量和成员方法的格式是固定的,故可以省略。故可以省略。2接口体举例举例i interface Printable nterface Printable public public static static fin

4、al int final int MAX=100;MAX=100;public abstract void add();public abstract void add();public abstract float(float x,public abstract float(float x,float y);float y);接口的接口的示例示例public interface Shape1public interface Shape1 public static final PI=3.14;public static final PI=3.14;public public abstract

5、abstract double area();double area();public public abstractabstract double volume(double double volume(double x);x);public public abstractabstract void show();void show();接口的特点接口的特点(1)(1)接口可以定义多重继承接口可以定义多重继承(2)(2)接口不存在最高层,而接口不存在最高层,而JavaJava中类的最高层是中类的最高层是ObjectObject类。类。(3)(3)接口中的方法只能被声明为接口中的方法只能被声明

6、为public abstractpublic abstract 接口中成员变量只能用接口中成员变量只能用public static final public static final 来来声明。声明。(4)(4)接口中的方法接口中的方法不能定义方法体不能定义方法体。在在JavaJava语言中,语言中,接口由类去实现以便使用接口由类去实现以便使用接口中的方法接口中的方法。一个类可以实现多个接口一个类可以实现多个接口,类通过使用关键字类通过使用关键字implementsimplements声明自己实声明自己实现一个或多个接口。如果实现多个接口,现一个或多个接口。如果实现多个接口,则用逗号隔开接口名

7、则用逗号隔开接口名如:如:class A class A implementsimplements Printable,AddablePrintable,Addable3 3接口的使用接口的使用重要性质重要性质如果一个类实现了接口,那么这个类必须如果一个类实现了接口,那么这个类必须重写该接口的所有方法重写该接口的所有方法重写接口的方法时,接口中的方法一定是重写接口的方法时,接口中的方法一定是public abstract public abstract 方法,所以类在重写接方法,所以类在重写接口方法时不仅要去掉口方法时不仅要去掉abstract abstract 修饰,修饰,给出给出方法体,而

8、且方法的访问权限一定要用方法体,而且方法的访问权限一定要用public public 来修饰。来修饰。例例6-16-1public public interfaceinterface Computable Computable int MAX=100;int MAX=100;int f(int x);int f(int x);public class public class ChinaChina implementsimplements ComputableComputable /China /China类实现类实现ComputableComputable接口接口 int number;in

9、t number;public int f(int x)/public int f(int x)/不要忘记不要忘记publicpublic关键字关键字 int sum=0;int sum=0;for(int i=1;i=x;i+)for(int i=1;i=x;i+)sum=sum+i;sum=sum+i;return sum;return sum;public class public class JapanJapan implementsimplements ComputableComputable /Japan /Japan类实现类实现ComputableComputable接口接口 i

10、nt number;int number;public int f(int x)public int f(int x)return 46+x;return 46+x;public class public class Example6_1Example6_1 public static void main(String args)public static void main(String args)China zhang;China zhang;Japan henlu;Japan henlu;zhang=new China();zhang=new China();henlu=new Japa

11、n();henlu=new Japan();zhang.number=28+Computable.MAX;zhang.number=28+Computable.MAX;henlu.number=14+Computable.MAX;henlu.number=14+Computable.MAX;System.out.println(zhang System.out.println(zhang的学号的学号+zhang.number+,zhang+zhang.number+,zhang求和结果求和结果+zhang.f(100);+zhang.f(100);System.out.println(henl

12、u System.out.println(henlu的学号的学号+henlu.number+,henlu+henlu.number+,henlu求和结果求和结果+henlu.f(100);+henlu.f(100);说明说明(1 1)如果父类实现了某接口,那么子类也就实现了该接)如果父类实现了某接口,那么子类也就实现了该接口,子类不必显式地使用关键字口,子类不必显式地使用关键字implementsimplements声明实现了声明实现了接口接口(2 2)接口声明时,关键字)接口声明时,关键字interfaceinterface前可加前可加publicpublic(3 3)如果一个类声明实现了一

13、个接口,但没有重写接口)如果一个类声明实现了一个接口,但没有重写接口中的所有方法,中的所有方法,那么这个类必须是那么这个类必须是abstractabstract类类interface interface ComputableComputable final int MAX=100;final int MAX=100;void speak(String s);void speak(String s);int f(int x);int f(int x);float g(float x,float y);float g(float x,float y);abstractabstract class

14、A class A implementsimplements ComutableComutable public int f(int x)public int f(int x)int sum=0;int sum=0;for(int i=1;i=x;i+)for(int i=1;i=x;i+)sum+=i;sum+=i;return sum;return sum;6.1.2 6.1.2 理解接口理解接口接口可以增加很多类都需要的功能,不同类可以实接口可以增加很多类都需要的功能,不同类可以实现相同的接口,同一个类也可以实现多个接口。现相同的接口,同一个类也可以实现多个接口。接口提供了方法声明与实现

15、相分离的机制,使实现接接口提供了方法声明与实现相分离的机制,使实现接口的多个类表现出相同的行为模式。口的多个类表现出相同的行为模式。当一个类不希望通过继承使得自己具有某个方法时,当一个类不希望通过继承使得自己具有某个方法时,就可以考虑去实现接口而不是把自己声明为某个类就可以考虑去实现接口而不是把自己声明为某个类的子类。的子类。例例6-26-2见教材6.1.3 6.1.3 接口的接口的UMLUML图图顶部是名字层,接口名必须是斜体,而且需要用顶部是名字层,接口名必须是斜体,而且需要用第二层是常量层第二层是常量层第三层是方法层第三层是方法层6.2 6.2 接口回调(接口回调(重点重点)6.2.1

16、6.2.1 接口变量与回调机制接口变量与回调机制6.2.2 6.2.2 接口的多态性接口的多态性6.2.3 abstract 6.2.3 abstract 类与接口的区别类与接口的区别6.2.1 6.2.1 接口变量与回调机制接口变量与回调机制接口是一种数据类型,用接口声明的变量称为接口接口是一种数据类型,用接口声明的变量称为接口变量变量接口变量中可以存放实现接口的类的实例的引用。接口变量中可以存放实现接口的类的实例的引用。接口回调?接口回调?可以把实现某一接口的类创建的对象的引用赋给该可以把实现某一接口的类创建的对象的引用赋给该接口声明的变量中,那么接口声明的变量中,那么该接口变量就可以该接

17、口变量就可以调用被类实现的接口方法调用被类实现的接口方法接口回调类似于上转型对象调用子类的重写方法接口回调类似于上转型对象调用子类的重写方法注意:接口变量无法调用类中的其他非接口方法注意:接口变量无法调用类中的其他非接口方法例例6-36-3interface ShowMessage interface ShowMessage void void 显示商标显示商标(String s);(String s);class TV implements ShowMessage class TV implements ShowMessage public void public void 显示商标显示商标

18、(String s)(String s)System.out.println(s);System.out.println(s);class PC implements ShowMessage class PC implements ShowMessage public void public void 显示商标显示商标(String s)(String s)System.out.println(s);System.out.println(s);public class Example6_3 public class Example6_3 public static void main(Stri

19、ng args)public static void main(String args)ShowMessage sm;/ShowMessage sm;/声明接口变量声明接口变量 sm=new TV();/sm=new TV();/接口变量中存放对象的引用接口变量中存放对象的引用 sm.sm.显示商标显示商标(长城牌电视机长城牌电视机);/);/接口回调。接口回调。sm=new PC();/sm=new PC();/接口变量中存放对象的引用接口变量中存放对象的引用 sm.sm.显示商标显示商标(联想奔月联想奔月5008PC5008PC机机);/);/接口回调接口回调 6.2.2 6.2.2 接口

20、的多态性接口的多态性继承只能让父类引用指向与其属于同一类的对象,继承只能让父类引用指向与其属于同一类的对象,例如肉类引用只能指向属于肉的对象。例如肉类引用只能指向属于肉的对象。接口引用则能指向任意类型的对象,即使对象间接口引用则能指向任意类型的对象,即使对象间没有任何关系,没有任何关系,只要这些对象所在的类实现了该只要这些对象所在的类实现了该接口接口interface Foodinterface Foodpublic void doEat();/public void doEat();/吃食物的方法吃食物的方法 abstract class Fruitabstract class Fruit

21、abstract class Meatabstract class Meat class Apple extends Fruit implements Foodclass Apple extends Fruit implements Food/实现接口中的方法实现接口中的方法public void doEat()public void doEat()System.out.println(System.out.println(我是苹果,我属于水果,我可以充当食物我是苹果,我属于水果,我可以充当食物被吃掉!被吃掉!););class Beef extends Meat implements Foo

22、dclass Beef extends Meat implements Food/实现接口中的方法实现接口中的方法public void doEat()public void doEat()System.out.println(System.out.println(我是牛肉,我属于肉类,我可以充当食物我是牛肉,我属于肉类,我可以充当食物被吃掉!被吃掉!););示例(续)示例(续)public class Testpublic class Test public static void main(String args)public static void main(String args)Fo

23、od f=new Apple();/Food f=new Apple();/创建苹果对象创建苹果对象f.doEat();/f.doEat();/调用苹果的吃法调用苹果的吃法f=new Beef();/f=new Beef();/创建牛肉的对象创建牛肉的对象f.doEat();/f.doEat();/调用牛肉的吃法调用牛肉的吃法 例例6-46-4见见教材教材6.2.3 abstract 6.2.3 abstract 类与接口的区别(牢记)类与接口的区别(牢记)相同点相同点(1 1)都包含抽象方法)都包含抽象方法(2 2)都不能被实例化)都不能被实例化(3 3)都是引用数据类型)都是引用数据类型区

24、别区别(1 1)一个类只能继承一个抽象类,而一个类)一个类只能继承一个抽象类,而一个类可以实现多个接口可以实现多个接口(2 2)接口中的成员的访问权限都是接口中的成员的访问权限都是publicpublic,而抽象类中成员的访问权限和普通类一样而抽象类中成员的访问权限和普通类一样(3 3)抽象类中可以声明成员变量,成员变量)抽象类中可以声明成员变量,成员变量的值可以被更改;的值可以被更改;接口中只能声明常量接口中只能声明常量(4 4)抽象类中可以声明抽象方法、普通成员)抽象类中可以声明抽象方法、普通成员方法以及构造方法;方法以及构造方法;接口中只能声明抽象方接口中只能声明抽象方法。法。6.3 6

25、.3 面向接口编程面向接口编程抽象类最本质的特性就是可以包含有抽象方法抽象类最本质的特性就是可以包含有抽象方法接口中只有抽象方法,接口中将其抽象方法的实现接口中只有抽象方法,接口中将其抽象方法的实现交给实现该接口的类交给实现该接口的类使用接口进行程序设计的核心思想是使用接口回调使用接口进行程序设计的核心思想是使用接口回调开闭原则:对扩展开放,对修改关闭。开闭原则:对扩展开放,对修改关闭。例例6-56-5设计一个广告牌,希望所设计的广告牌可以展示许设计一个广告牌,希望所设计的广告牌可以展示许多公司的广告词多公司的广告词(1 1)分析)分析广告牌可以展示很多公司,要做抽取。抽取出这么广告牌可以展示

26、很多公司,要做抽取。抽取出这么多公司的广告的共性多公司的广告的共性(2 2)设计接口)设计接口设计一个接口设计一个接口Advertisement,Advertisement,该接口有两个方法该接口有两个方法showAdvertisement()showAdvertisement()和和getCorpName().getCorpName().各个各个公司要实现该接口公司要实现该接口例例6-56-5(3 3)设计广告牌类)设计广告牌类该类有一个该类有一个show(Advertisement adver)show(Advertisement adver)方法。方法。可以接收任何实现了可以接收任何实现

27、了AdvertisementAdvertisement接口的类的对接口的类的对象。象。Advertisement.javaAdvertisement.javapublic interface public interface Advertisement Advertisement /接口接口 public void showAdvertisement();public void showAdvertisement();public String getCorpName();public String getCorpName();AdvertisementBoard.javaAdvertisem

28、entBoard.javapublic class public class AdvertisementBoardAdvertisementBoard /负责创建负责创建广告牌广告牌 public void show(Advertisement adver)public void show(Advertisement adver)System.out.println(adver.getCorpName()+System.out.println(adver.getCorpName()+的的广告词如下广告词如下:);:);adver.showAdvertisement();/adver.showA

29、dvertisement();/接口回调接口回调 WhiteCloudCorp.javaWhiteCloudCorp.javapublic class public class WhiteCloudCorpWhiteCloudCorp implements implements Advertisement /PhilipsCorpAdvertisement /PhilipsCorp实现实现AvertisementAvertisement接口接口 public void showAdvertisement()public void showAdvertisement()System.out.pr

30、intln(System.out.println(););System.out.printf(System.out.printf(飞机中的战斗机,哎飞机中的战斗机,哎yes!n);yes!n);System.out.println(System.out.println(););public String getCorpName()public String getCorpName()return return 白云有限公司白云有限公司;BlackLandCorp.javaBlackLandCorp.javapublic class public class BlackLandCorpBlack

31、LandCorp implements implements Advertisement Advertisement public void showAdvertisement()public void showAdvertisement()System.out.println(*);System.out.println(*);System.out.printf(System.out.printf(劳动是爹劳动是爹nn土地是妈土地是妈nn想想种啥来种啥来nn就往外接就往外接n);n);System.out.println(*);System.out.println(*);public Stri

32、ng getCorpName()public String getCorpName()return return 黑土集团黑土集团;Example6_5.javaExample6_5.javapublic class Example6_5 public class Example6_5 public static void main(String args)public static void main(String args)AdvertisementBoard board=new AdvertisementBoard AdvertisementBoard board=new AdvertisementBoard();();board.show(board.show(newnew BlackLandCorpBlackLandCorp();();board.show(board.show(newnew WhiteCloudCorpWhiteCloudCorp();();小结小结熟熟练练掌握接口和抽象掌握接口和抽象类类的相同点和区的相同点和区别别,理解并能,理解并能够够正确使用接口。正确使用接口。理解基于接口的多理解基于接口的多态态。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁