JAVA:接口与抽象类.ppt_第1页
JAVA:接口与抽象类.ppt_第2页
JAVA:接口与抽象类.ppt_第3页
JAVA:接口与抽象类.ppt_第4页
JAVA:接口与抽象类.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面向对象程序设计,接口与抽象类,教学内容,接口的概念、定义接口方法集合接口的应用抽象类的概念接口与抽象类的区别,教学目标,理解和掌握接口的定义掌握实现接口的方法掌握集合及其集合接口的应用理解List接口理解抽象类的概念理解接口与抽象类的区别,8.1引例,例8.1组装电脑:通过PCI接口将主板与显卡和声卡连接。分析:很多教材在介绍接口时大多使用组装电脑作为案例,本章也选择大家熟悉的组装电脑作为引例。实际上,无论是显卡还是声卡,都是插在PCI槽上的,所以,首先定义一个PCI接口,然后定义显卡类和声卡类实现PCI接口,从而它们的对象能直接传递给PCI接口的对象,在参数传递过程中实现接口回调。,/Jpro8_1.javainterfacePCIvoidsetName(Strings);voidrun();classVideoCardimplementsPCIStringname=微星;publicvoidsetName(Strings)name=s;publicvoidrun()System.out.println(name+显卡已开始工作!);classSoundCardimplementsPCIStringname=AC;publicvoidsetName(Strings)name=s;publicvoidrun()System.out.println(name+声卡已开始工作!);,8.1引例(续),8.1引例(续),classMainboardpublicvoidinterfacePCI(PCIp)p.run();publicvoidrun()System.out.println(主板已开始工作!);publicclassJpro8_1publicstaticvoidmain(Stringargs)Mainboardmb=newMainboard();VideoCardvc=newVideoCard();vc.setName(HuaWei);SoundCardsc=newSoundCard();erfacePCI(vc);erfacePCI(sc);mb.run();,8.2接口,接口就是方法定义和常量值的集合。接口又称界面,引入接口的目的是为了克服Java单继承机制带来的缺陷,实现类的多继承的功能。Java的接口在语法上类似于类的一种结构,但是接口与类有很大的区别。它只有常量定义和方法声明,没有变量和方法的实现。接口还可以用来实现不同类之间的常量共享。,8.2.1定义接口,接口是一种特殊的类,只定义了类中方法的原型,而没有直接定义方法的内容。接口的定义包括接口声明和接口体两部分,格式如下:public|abstractinterface接口名extends接口列表常量声明;方法声明;接口的修饰符可以是public或abstract,其中public或abstract可以缺省。public的含义与类修饰符是一致的。但是缺省public或abstract修饰符时,定义的接口只能被同一个包中的其他类和接口使用。,8.2.1定义接口(续),下面是一个接口定义的例子:publicinterfaceShapefloatwidth=9.8f;floatheight=6.6f;publicfloatgirth();publicfloatarea();上面程序段定义了一个名为Shape的接口,其中有两常量width和height,以及两个抽象方法girth()和area()。与类一样,接口也具有继承性。定义接口时可以使用extends关键字定义该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的单继承不同,一个接口可以有多个父接口,接口名称之间用“,”分隔。新的接口将继承所有父接口的属性和方法。,8.2.2接口实现,在类中实现接口的格式如下:类修饰符class类名extends父类名implements接口名列表其中,接口名列表包括多个接口名称,各接口间用逗号分隔。implements是实现接口的关键字。实现接口的类,如果不是抽象类,就必须实现接口中定义的所有方法,并给出具体的实现代码,当然还可以使用接口中定义的任何常量。,例8.2接口的实现示例。/Jpro8_2.javainterfaceShape/定义一个接口ShapedoublePI=3.14;voidprint();classCircleimplementsShape/实现接口Shapepublicvoidprint()System.out.println(我实现了接口+PI);publicclassJpro8_2publicstaticvoidmain(Stringargs)Circlecircle=newCircle();circle.print();,8.2.2接口实现(续),实现接口时,需要注意以下问题:1如果实现接口的类不是abstract修饰的抽象类,那么在类的定义部分必须实现接口中定义的所有方法,并给出具体的实现代码。这是因为非抽象类中不可以存在抽象方法。2如果实现接口的类是abstract修饰的抽象类,那么它可以不实现该接口的所有抽象方法。3在实现接口方法时,必须将方法声明为公共方法(public),而且还要将方法的参数列表、名称和返回值与接口中定义的完全一致。4如果在实现接口的类中所实现的方法与抽象方法有相同的方法名称和不同的参数列表,则只是重载了一个新的方法,并没有实现接口中的抽象方法。5接口的抽象方法的访问修饰符规定为public,则类在实现这些抽象方法时,必须显式地使用public修饰符,否则系统提示出错警告。6如果接口中的方法的返回类型不是void,则在类中实现该方法时,方法体中至少要有一条return语句。,8.2.2接口实现(续),8.3集合接口,Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口和实现接口的实现类组成。一般来说,理解了集合接口就容易掌握集合框架。Java平台提供了6个集合接口,不同接口用来描述一组不同数据类型。,8.3.1Collection接口,Collection是在java.util包中的接口,是整个Java集合框架中的基石。Collection接口的声明如下:publicinterfaceCollectionCollection接口是其他接口的父接口,它定义了集合框架中一些最基本的方法。除了Collection接口外,其他常用的还有Set、List这两大类。Collection跟数组最大的不同是数组有容量大小的限制,而Collection没有。此外,Collection中存放的都是对象,即使是基本类型也要转换为对象类型。Collection中的数据称之为元素。这些元素没有特定的顺序,元素也可以重复。,8.3.1Collection接口(续),8.3.2List接口,在使用List接口时注意以下两点:(1)所有的索引返回的方法都有可能抛出一个IndexOutOfBoundsException异常。(2)subList(intfromIndex,inttoIndex)返回的是包括fromIndex,不包括toIndex的视图,该列表的长度为toIndex-fromIndex。,8.3.2List接口(续),例8.3添加与删除List中的元素。/Jpro8_3.javaimportjava.util.*;publicclassJpro8_3publicstaticvoidmain(Stringargs)Listlist=null;list=newArrayList();list.add(Beijing);list.add(0,);list.add(Anhui);list.add(Shanghai);list.remove(0);list.remove(Anhui);System.out.println(list);,8.3.3Set接口,Set集合由Set接口与Set接口的实现类组成。与List集合不同的是,Set集合中的对象不按特定的方式排序,只要简单将对象加入集合中,但是不能有重复对象。Set接口继承了Collection接口,因此包含了Collection接口的所有方法。要使用Set集合,先声明为Set类型,然后通过Set接口的实现类来实例化。Set接口的常用实现类是HashSet和TreeSet类。例如:Setset=newHashSet();就声明了一个Set实例。要获取Set集合对象,先生成Iterator对象,再通过迭代器来获取集合中的对象,如:Iteratorit=set.iterator();while(it.hasNext()System.out.print(it.next()+”“);由于Set集合中的对象不能重复,因此可以使用Set集合中的addAll()方法将Collection集合中添加到Set集合中,以除去重复对象。,例8.4首先创建一个List对象,并添加元素,然后将List集合中的元素添加到Set集合中,则会除去其中重复的元素。/Jpro8_4.javaimportjava.util.*;publicclassJpro8_4publicstaticvoidmain(Stringargs)Listlist=newArrayList();/创建List集合对象list.add(1);/向集合中添加元素list.add(2);list.add(3);list.add(2);Setset=newHashSet();/创建List集合对象set.addAll(list);/将List集合添加到Set集合中Iteratorit=set.iterator();/创建Set集合迭代器System.out.println(集合中的元素是:);while(it.hasNext()System.out.println(it.next();,8.3.3Set接口,8.3.4Iterator接口,Iterator接口位于java.util包中,用来遍历集合中的元素,它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。如果没有使用Iterator,遍历一个数组的方法是使用索引。下面先看看Iterator接口的定义:publicinterfaceIteratorbooleanhasNext();Objectnext();voidremove();每一种集合类返回的Iterator具体类型可能不同。例如,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个Iterator接口就可以了。,例8.5Iterator接口的使用。/Jpro8_5.javaimportjava.util.*;publicclassJpro8_5publicstaticvoidmain(Stringargs)Collectionc=newArrayList();c.add(a);c.add(b);Iteratorit=c.iterator();for(;it.hasNext();)Strings=(String)it.next();System.out.println(s);,8.3.4Iterator接口,8.4抽象类,抽象类的定义与一般类一样都有数据和方法,定义格式与一般类也非常类似,只是在定义类的class前增加一个关键字abstract就表示定义一个抽象类,即用abstract说明的类称为抽象类。例如,定义一个抽象类Animal。publicabstractclassAnimalStringname;intage;publicabstractvoidgo(),8.4抽象类(续),抽象方法一定包含在抽象类中,抽象方法同样不能直接实现,它只能在子类中被实现。接口类似于抽象类,只是接口中的所有方法都是抽象的。这些方法必须由实现这一接口的类来实现。Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供非抽象方法方法的实现,而Java接口中的所有方法都是抽象的。所以,如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都能很快得到这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为必须让每一个类都再实现这个方法才可以。,8.4抽象类(续),例8.6下面例子定义一个抽象类,然后通过继承实现该抽象类。/Jpro8_6.javaabstractclassAnimalStringname;abstractvoidgo();classCatextendsAnimalCat(Stringname)=name;publicvoidgo()System.out.println(name+canrun.);classBirdextendsAnimalBird(Stringname)=name;publicvoidgo()System.out.println(name+canfly.);publicclassJpro8_6publicstaticvoidmain(Stringargs)Catc=newCat(Cady);Birdb=newBird(Bird);c.go();b.go();,8.5实例,例8.7接口可以象类一样实现多继承,请分析下面的程序。分析:接口类似于抽象类,但是它可以实现多继承机制。首先定义一个三个接口,然后定义一盒类实现这三个接口,然后应用接口回调实现方法效用。,8.5实例(例8.7续),/Jpro8_7.javainterfaceCanFightvoidfight();interfaceCanSwimvoidswim();interfaceCanFlyvoidfly();classActionCharacterpublicvoidfight()System.out.println(canfight!);classHeroextendsActionCharacterimplementsCanFight,CanSwim,CanFlypublicvoidswim()System.out.println(canswim);publicvoidfly()System.out.println(canfly);,8.5实例(例8.7续),publicclassJpro8_7publicstaticvoidt(CanFightx)x.fight();publicstaticvoidu(CanSwimx)x.swim();publicstaticvoidv(CanFlyx)x.fly();publicstaticvoidw(ActionCharacterx)x.fight();publicstaticvoidmain(Stringargs)Heroh=newHero();t(h);u(h);v(h);w(h);,8.5实例(续),例8.8使用集合创建单选按钮:创建包含String对象的集合,然后通过遍历集合创建单选按钮。分析:本实例将创建两个单选按钮,请读者参照第11章的关于单选按钮的知识分析该例题。将按选按钮的标签存放到一个集合ArrayList中,在创建单选按钮时,通过get()方法从集合中获取标签。本实例用到第11章相关知识,大家也可以在学习第11章后回头再分析改程序。,/Jpro8_8.javaimportjava.util.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassJpro8_8extendsJFrameimplementsItemListenerJRadioButtonb1,b2;ButtonGroupbGroup;JLabellabel;JScrollPanescroll;JPanel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论