面向对象程序设计第13讲 包和接口(三)_第1页
面向对象程序设计第13讲 包和接口(三)_第2页
面向对象程序设计第13讲 包和接口(三)_第3页
面向对象程序设计第13讲 包和接口(三)_第4页
面向对象程序设计第13讲 包和接口(三)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

第13讲包和接口(三)/上讲回顾接口的定义和实现Collection接口抽象类及其应用类File、String、StringBuffer中常用方法掌握System类的常用方法会使用Math类的常用方法会使用Random类的常用方法本讲教学目标理解Vector类及其常用方法理解接口5、6、7章习题Vector类Vector类是Java语言提供的一种高级数据结构,可用于保存一系列对象。实际上,Java并不支持动态数组,Vector类提供了一种与"动态数组"相近的功能。如果不能事先确定要保存的对象的数目,或是需要方便获得某个对象的存放位置时,可以选择Vector类。Vector有3个构造方法:publicVector();publicVector(int

initialCapacity);publicVector(int

initialCapacity,int

capacityIncrement);

第一个构造方法既不指定初始的存储容量,也不规定增长的增量,只是创建一个空的向量。第二个构造方法创建一个具有initialCapacity个元素空间的向量,但没有指定增长的增量。第三个构造方法在创建Vector对象时指定了初始的存储容量initialCapacity的向量,并且当向量需要增长以向里面追加元素时,一次性增加capacityIncrement个元素。Vector类的构造方法publicboolean

add(Object

obj)将对象obj添加到向量的末尾。publicvoidadd(int

index,Object

obj)将对象obj插入到向量的指定位置。publicfinalsynchronizedvoidaddElement(Object

obj)将对象obj插入向量的尾部。对同一个向量对象,可在其中插入不同类的对象。注意插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。setElementAt(Object

obj,intindex)将index处的对象替换成obj,原来的对象将被覆盖。publicvoidset(int

index,Object

obj)把指定位置处的元素用对象obj替换掉。Vector类的常用方法removeElement(Object

obj)从向量中删除obj对象。若有存在多个obj对象,则删除第一个obj对象,同时将后面所有对象前移一位。removeAllElements()删除向量中所有的对象。publicfinalsynchronizedvoidremoveElementlAt(intindex)删除index所指的对象,并将后面的所有对象前移一位。publicfinalint

indexOf(Object

obj)从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1。Vector类的常用方法(续)publicfinalint

indexOf(Object

obj,intindex)

从指定位置查找对象obj在此向量中首次出现的位置。publicfinalint

lastIndexOf(Object

obj)从向量尾部开始逆向搜索obj,返回对象obj最后一次出现的下标,若不存在此obj,返回-1。publicint

lastIndexOf(Object

obj,intindex)对象obj在位置index之前最后一次出现的位置。publicObjectfirstElement()获取此向量的第一个元素。Vector类的常用方法(续)publicObjectlastElement()获取此向量的最后一个元素。publicObjectget(intindex)获取此向量指定位置处的元素。publicObjectremove(intindex)从此向量中删除指定位置处的元素,并返回这个元素。publicfinalint

size()获取向量所含有的元素的个数。publicint

setSize(intsize)重新设置向量的大小,若原向量的大小比size大,则放弃后面的元素。publicfinalsynchronizedEnumeration

elements()获取一个枚举对象。Vector类的常用方法(续)importjava.util.Vector;importjava.util.Enumeration;publicclassEx7_12{publicstaticvoidmain(String[]args){Vectorvector=newVector();Integerinteger1=newInteger(1);

vector.addElement("one");//加入的为字符串对象

vector.addElement(integer1);vector.addElement(integer1);//加入的为Integer的对象

vector.addElement("two");

vector.addElement(newInteger(2));vector.addElement(integer1);vector.addElement(integer1);

System.out.println("Thefirstvectoris:"+vector);vector.insertElementAt("three",2);

vector.insertElementAt(newFloat(3.14),3);Vector类举例在指定位置插入新对象,指定位置后的对象依次往后顺延

System.out.println("Thesecondvectoris:"+vector);vector.setElementAt("four",2);

System.out.println("Thethirdvectoris:"+vector);vector.removeElement(integer1);

Enumeration

enum=vector.elements(); //枚举接口

System.out.print("Thefourvectoris:");

while(enum.hasMoreElements())

System.out.print(enum.nextElement()+"");

System.out.println();

System.out.println("Thefirstpositionofobject1:"+vector.indexOf(integer1));

System.out.println("Thelastpositionofobject1:"+vector.lastIndexOf(integer1));vector.setSize(4);

System.out.println("Thenewvectoris:"+vector);}}Vector类举例(续)实例接口可以象类一样实现多继承,请分析下面的程序。publicclassEx7_13{publicstaticvoidt(CanFightx){

x.fight();}publicstaticvoidu(CanSwimx){

x.swim();}publicstaticvoidv(CanFlyx){

x.fly();}publicstaticvoid

w(ActionCharacterx){

x.fight(); }publicstaticvoidmain(String

args[]){Heroh=newHero();

t(h);u(h);

v(h);w(h);}}packageno12.ex7;interfaceCanFight{voidfight();}interfaceCanSwim{voidswim();}interfaceCanFly{voidfly();}classActionCharacter{publicvoidfight(){

System.out.println("canfight!");}}classHeroextendsActionCharacterimplementsCanFight,CanSwim,CanFly{publicvoidswim(){

System.out.println("canswim");}publicvoidfly(){

System.out.println("canfly");}}理解接口 接口的语法规则很容易记住,但真正理解接口更重要。那为什么要用接口呢?假如轿车、卡车、拖拉机、摩托车、客车都是机动车的子类,其中机动车是一个抽象类。如果机动车中有一个抽象方法“收取费用”,那么所有的子类都要实现这个方法,即给出方法体,产生各自的收费行为。这显然不符合人们的思维方法,因为拖拉机可能不需要有”收取费用”的功能,而其他的一些类,比如飞机、轮船等可能也需要具体实现”收取费用”。理解接口 接口可以增加很多类都需要实现的功能,不同的类可以使用相同的接口,同一个类也可以实现多个接口。接口只关心功能,并不关心功能的具体实现,比如”客车类”实现一个接口,该接口中有一个”收取费用”的方法,那么这个”客车类”必须具体给出怎样收取费用的操作,即给出方法的方法体,不同车类都可以实现”收取费用”,但”收取费用”的手段可能不相同。接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继承关系,就象各式各样的商品,它们可能隶属不同的公司,工商部门要求都必须具有显示商标的功能。实现同一接口,但商标的具体制作由各个公司自己去实现。 再比如,你是一个项目主管,你需要管理许多部门,这些部门要开发一些软件所需要的类,你可能要求某个类实现一个接口,也就是说你对一些类是否具有这个功能非常关心,但不关心功能的具体体现,比如这个功能是speakLove

,但你不关心是用汉语实现功能speakLove

或用英语实现speakLove。在某些时候,你也许打一个电话就可以了,告诉远方的一个开发部门实现你所规定的接口,并建议他们用汉语来实现speakLove。如果没有这个接口,你可能要化很多的口舌来让你的部门找到那个表达爱的方法,也许他们给表达爱的那个方法起的名字是完全不同的名字。理解接口接口使用

接口(interface)就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。通过接口可以指明多个类需要实现的方法。通过接口可以了解对象的交互界面,而不需了解对象所对应的类。接口实例

interface收费{publicvoid收取费用();}class公共汽车implements收费{publicvoid收取费用(){

System.out.println("公共汽车:一元/张,不计算公里数");}}class出租车implements收费{publicvoid收取费用(){

System.out.println("出租车:1.60元/公里,起价3公里");}}class电影院implements收费{publicvoid收取费用(){

System.out.println("电影院:门票,十元/张");}}classExample4{publicstaticvoidmain(String

args[]){

公共汽车七路=new公共汽车();

出租车天宇=new出租车();

电影院红星=new电影院();

七路.收取费用();天宇.收取费用();

红星.收取费用();}}注:接口声明时,如果关键字interface前面加上public关键字,就称这样的接口是一个public接口,public接口可以被任何一个类使用。如果一个接口不加public修饰,就称做友好接口类,友好接口可以被同一包中的类使用。接口回调是指可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法。接口回调接口回调示例

interfaceShowMessage{void显示商标(Strings);}classTVimplementsShowMessage{publicvoid显示商标(Strings){

System.out.println(s);}}classPCimplementsShowMessage{publicvoid显示商标(Strings){

System.out.println(s);}}接口回调示例publicclassExample5{publicstaticvoidmain(String

args[]){

ShowMessage

sm;

sm=newTV();sm.显示商标("长城牌电视机");

sm=newPC();sm.显示商标("联想奔月5008PC机");}}第7章小结包是类和接口的集合,包可以嵌套。类用一个package语句定义所属的包。Import语句使包中定义的类和接口可以直接按名引用。包又分为用户自定义包和系统包。用户自定义包是由用户自己定义的,相当于文件系统中的文件夹,用来存放用户定义的类。接口是常量和抽象方法的集合。接口是Java对多重继承的解决方法。类实现接口的方法是把该接口加入implements语句,并且实现接口及其父接口中的所有抽象方法。Java系统包中大量的类,如:File类、System类、以及Math类和Vector类。第5章复习以下程序的功能是,统计数组{56,90,89,23,45,61,60,59}中元素值小于60的个数,并输出。请将程序补充完整。注意:请勿改动程序已有内容,仅在?处填入适当的语句。publicclassJava1{ publicstaticvoidmain(String[]args){

intscore[]={56,90,89,23,45,61,60,59};

intnum=0;

int

len=score.?;

inti=0;

while(i<?){

if(?<60)

num++;

?;

System.out.println("<60:"+num); }}第6章复习仔细阅读程序,完成类Java1的定义,并将程序补充完整。注意:请勿改动程序已有内容,仅在?处填入适当的语句。publicclassJava1{

intnum1; doublenum2;

publicJava1(?)

{ num1=a; num2=b;

} publicstaticvoidmain(String[]args){

inta=23; doubleb=4.5;

温馨提示

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

评论

0/150

提交评论