Java基础抽象类接口_第1页
Java基础抽象类接口_第2页
Java基础抽象类接口_第3页
Java基础抽象类接口_第4页
Java基础抽象类接口_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

接口、抽象类、Map类抽象类抽象类是指在类中定义方法,但是并不去实现它,而在它的子类中去具体的实现。定义的抽象方法不过是一个方法占位符。继承抽象类的子类必须实现父类的抽象方法,除非子类也被定义成一个抽象类。定义修饰符abstract类名{//类体}修饰符abstract返回值类型方法名();//抽象类的声明abstractclassAnimal{Stringtype;Stringname;intage;intweight;voideat(){System.out.println("动物爱吃饭");}abstractvoidbreath();voidsleep(){System.out.println("动物在睡觉");}}//Tiger继承抽象类AnimalclassTigerextendsAnimal{StringtigerType;Stringfrom;voidtigerRun(){System.out.println("老虎在奔跑");}voidbreath(){System.out.println("老虎是用肺呼吸的");}}classFishextendsAnimal{StringfishType;voidswim(){System.out.println("鱼在游泳");}voidbreath(){System.out.println("鱼是用腮呼吸的");}}程序把Animal定义为抽象类,里面的breath方法被定义为抽象方法,而后面定义的Animal的子类Tiger和Fish都实现了breath方法。抽象类的使用定义完抽象类后,就可以使用它。但是抽象类和普通类不同,抽象类不可以实例化,如语句Animalanimal=newAnimal();是无法通过编译的,但是可以创建抽象类的对象变量,只是这个变量只能用来指向它的非抽象子类对象。示例如下。publicclassUseAbstract{publicstaticvoidmain(String[]args){Animalanimal1=newFish();animal1.breath();Animalanimal2=newTiger();animal2.breath();}}程序中定义了两个Animal对象变量,一个存放Fish对象,另一个存放Tiger对象,分别调用这两个对象的breath方法。由于根本不可能构建出Animal对象,所以存放的对象仍然是Tiger对象,它会动态绑定正确的方法进行调用。需要注意的是,尽管animal存放的是Tiger对象或是Fish对象,但是不能直接调用这些子类的方法,语句animal.swim;和animal2.tigerRun();都是不正确的。调用这项方法的时候仍然需要进行类型转换,正确的使用方法如下。((Fish)animal1).swim();((Tiger)animal2).tigerRun();接口接口是Java提供的一项非常重要的结构。它定义了一系列的抽象方法和常量,形成一个属性集合。接口定义完成后任何类都可以实现接口,而且一个类可以实现多个接口。实现接口的类必须实现接口中定义的抽象方法,具体实现细节由类自己定义。可以说接口定义了类的框架,它实际上是一种完全的抽象类。接口的定义了解什么是接口后,现在就来定义接口。接口的定义跟类的定义十分相似,只是使用的关键字不同,类的定义使用的关键字是class,而接口使用的关键字是interface。接口定义的形式如下。修饰符interface接口名{//接口内容//声明变量类型变量名;……//声明方法返回值类型方法名();……}定义接口注意事项接口的修饰符只能为默认的(无修饰符)或者public。当修饰符为默认时,接口是包可见的,在接口所在的包之外的类不能使用接口。修饰符为public时,任何类都可以使用该接口。接口的名字应该符合Java对标识符的规定。接口内可以声明变量,接口内的变量被自动设置为共有的、静态的、最终的字段。接口定义的方法都为抽象,它们被自动地设置为public。接口也被保存为.java文件,文件名与类名相同。在接口中声明一个变量。inti;它的实际效果如下。publicstaticfinali;在接口定义时可以把它明确地定义为publicstaticfinal,但是因为字段会被自动地设置为这些类型,所以不建议再写出。下面是一个完整的接口的定义。publicinterfaceAnimal{//接口中的变量intBIG_TYPE=5;//用接口声明方法,只有方法的声明没有具体实现voidsleep();voideat();voidbreath();}接口的实现接口的实现是指具体实现接口的类。接口的声明仅仅给出了抽象方法,相当于事先定义了程序的框架。实现接口的类必须要实现接口中定义的方法。实现接口的形式如下:class类名implements接口1,接口2{方法1(){//方法体}方法2(){//方法体}}实现接口注意事项由关键字表示实现的接口,多个接口之间用逗号隔开。实现接口需要注意以下几点。如果实现接口的类不是抽象类,它必须实现接口中定义的所有的方法。如果该类为抽象类,在它的子类甚至子类的子类中要实现接口中定义的方法。实现接口的方法时必须使用相同的方法名和参数列表。实现接口类中的方法必须被声明为public,因为在接口中的方法都被定义为public,根据继承的原则,访问范围只能放大,不能缩小。publicclassTigerimplementsAnimal{//实现breath方法publicvoidbreath(){System.out.println("Thetigerbreath");}//实现eat方法publicvoideat(){System.out.println("Thetigereat");}//实现sleep方法publicvoidsleep(){System.out.println("Thetigersleep");}publicstaticvoidmain(String[]args){Tigertiger=newTiger();tiger.breath();tiger.eat();tiger.sleep();}}接口之间也可以有继承关系。继承接口的接口拥有它的父接口的方法,它还可以定义自己的方法,实现这个子接口的类。要实现所有这些方法,示例如下,使用上面的Animal动物接口,然后定义一个子接口哺乳动物Mammal。//子接口publicinterfaceMammalextendsAnimal{voidrun();}如果类要实现Mammal,它必须实现两个接口中的所有方法,下面是重新定义的类Tiger。publicclassTigerimplementsMammal{//实现breath方法publicvoidbreath(){System.out.println("Thetigerbreath");}//实现eat方法publicvoideat(){System.out.println("Thetigereat");}//实现sleep方法publicvoidsleep(){System.out.println("Thetigersleep");}//实现run方法publicvoidrun(){System.out.println("Thetigerrun");}publicstaticvoidmain(String[]args){Tigertiger=newTiger();tiger.breath();tiger.eat();tiger.sleep();tiger.run();}}接口的应用跟抽象类一样,接口也不可以实例化,但是可以声明接口类型的变量,它的值必须是实现了该接口的类的对象。例如:Animaltiger=newTiger();通过tiger,只能调用Animal中定义的方法eat、sleep、breath,如果使用语句Mammaltiger=newTiger();,就可以调用在Mammal接口中定义的run方法了。当然,通过强制类型转换可以调用所有的方法,示例程序如下,首先看两个接口的定义,其中Mammal接口继承了Animal接口。interfaceAnimal{intBIG_TYPE=5;voidsleep();voideat();voidbreath();}interfaceMammalextendsAnimal{voidrun();}classTigerimplementsMammal{Stringname;publicTiger(Stringnm){name=nm;}publicvoidbreath(){System.out.println(name+"Thetigerbreath");}publicvoideat(){System.out.println(name+"Thetigereat");}publicvoidsleep(){System.out.println(name+"Thetigersleep");}publicvoidrun(){System.out.println(name+"Thetigerrun");}}classFishimplementsAnimal{Stringname;publicFish(Stringnm){name=nm;}publicvoidbreath(){System.out.println(name+"用腮呼吸");}publicvoideat(){System.out.println(name+"在吃水草");}publicvoidsleep(){System.out.println(name+"在睁着眼睛睡觉");}}publicclassAnimalDemo{publicstaticvoidmain(String[]args){//Animal接口,Fish对象Animalfish=newFish("大鲨鱼");//Animal接口,Tiger对象Animaltiger1=newTiger("东北虎");//Mammal接口,Tiger对象Mammaltiger2=newTiger("华南虎");//使用fish调用各种方法fish.breath();fish.eat();fish.sleep();//使用tiger1调用各种方法tiger1.breath();tiger1.eat();tiger1.sleep();//调用run方法,需要进行类型转换((Tiger)tiger1).run();//使用tiger2调用各种方法tiger2.breath();tiger2.eat();tiger2.sleep();tiger2.run();}}这个程序主要是展示通过接口来实现多态的一种方式。接口变量来存放接口实现类的对象,通过它来调用方法的时候,程序会调用“合适”的方法,过程跟继承中讲到的动态绑定很相似。接口的另一个重要应用是用它来创建常量组,例如要用int类型的一组数来表示星期,而且这些天都是固定不需要改变的,就可以通过接口来实现。//用接口来存放变量interfaceWeekDays{intMONDAY=1;intTUESDAY=2;intWEDNESDAY=3;intTHURSDAY=4;intFRIDAY=5;intSATURDAY=6;intSUNDAY=7;}classTimeimplementsWeekDays{voidprint(){System.out.println("MONDAY="+MONDAY);System.out.println("TUESDAY="+TUESDAY);System.out.println("WEDNESDAY="+WEDNESDAY);System.out.println("THURSDAY="+THURSDAY);System.out.println("FRIDAY="+FRIDAY);System.out.println("SATURDAY="+SATURDAY);System.out.println("SUNDAY="+SUNDAY);}}publicclassWeekDayDemoimplementsWeekDays{publicstaticvoidmain(String[]args){Time

温馨提示

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

最新文档

评论

0/150

提交评论