JAVA-抽象类、接口与包_第1页
JAVA-抽象类、接口与包_第2页
JAVA-抽象类、接口与包_第3页
JAVA-抽象类、接口与包_第4页
JAVA-抽象类、接口与包_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第5章抽象类、接口与包1学习目标理解抽象类和接口。掌握创立和导入包的方法。2抽象电器(play)电视机(playvideo)影碟机(playsound)抽象的作用是从一类相似实体中抽取共性的东西,比方任何电器都有一个播放功能,只是具体播放的内容不同而已。35.1抽象类抽象类表达数据抽象的思想,是实现多态的一种手段,其目的是提供可由所有子类共享的一种形式,子类可根据自身需要扩展抽象类。用abstract修饰的类被称为抽象类。4概念抽象类:没有具体实例对象的类。抽象类通常包括一个或多个抽象方法〔只有方法说明,没有方法体〕,抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。它的主要用途是用来描述概念性的内容和方案,没有具体的实现,这样可以提高开发效率,更好地统一用户“接口”。5定义[<修饰符>]abstractclass类名{成员变量定义;abstract返回类型方法名〔[参数列表]〕;返回类型方法名〔[参数列表]〕{}//非抽象方法}6

abstract抽象类不能被实例化构造方法

和static

方法不能是抽象的父类的抽象方法往往在子类中实现

特点7说明可包含抽象方法和非抽象方法。但包含抽象方法的类必须为抽象类子类〔抽象类除外〕继承抽象类时,必须实现所有的抽象方法。abstract不能修饰变量和构造函数、不能与static、private、final并列修饰同一个方法。抽象类不能被实例化。抽象类可以具有指向子类对象的对象引用8例如抽象方法不具有任何实现代码abstractclassShape{protecteddoublelen;//边长长度abstractdoublearea();}classSquareextendsShape{ Square(doublenum1){super(num1);}

doublearea(){("正方形面积为:");returnlen*len;}}

9抽象类的使用由于抽象类只是预先确定了总体结构,缺少实际内容或实现过程,又不能被实例化,因此要发挥它的作用,必须被子类继承后,才具有实际意义。继承抽象类的子类〔除抽象类外〕,必须将所有抽象方法重写和实现。10抽象类的作用子类继承该抽象类。当一个非抽象类继承该抽象类,必须实现该抽象类中的全部抽象方法。〔非抽象类不应该包含抽象方法〕1112注意抽象方法必须在抽象类中进行定义不能用关键字abstract来修饰构造方法关键字static和private不能与abstract组合使用关键字final不能与abstract组合使用13Continue抽象类可以继承抽象类,这样就不用再实现父类的方法。abstractclassA{ abstractvoidmethod1();}abstractclassBextendsA{ abstractvoidmethod2();}145.2接口接口:可以帮助实现类间多重继承结构。接口是抽象方法和静态常量的集合,因此所有的方法都需要在子类中实现。用途:

通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。

通过接口了解对象的交互界面,而无需了解对象所对应的类。

可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点15举例单继承水果梨北京鸭梨水果类梨香蕉苹果树树木类松树柳树多继承16定义[访问权限]interface接口名[extends父接口1,父接口2,…]{//常量声明[public][static][final]类型常量名=常量值;//抽象方法声明[public][abstract]类型方法名(参数);}17说明接口中的成员变量默认为publicstaticfinal型的,而且值固定。接口中的所有方法默认为publicabstract方法。类〔抽象类除外〕实现接口,必须实现所有抽象方法。无构造函数,不能被实例化,可以实现多重继承。18例如:创立接口//定义方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定义程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}19接口的使用用关键字implements实现接口,例如:classdemoimplementsmyinterface如果有一个以上接口被实现,那么用逗号隔开接口名称,如下所示:classdemoimplementsMycalc,Mycount实现接口的类〔除抽象类外〕必须实现其所有的抽象方法。类在实现时,必须显式地使用public修饰符。20interfaceMyInterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}接口使用例如publicclassInterfaceDemoimplementsMyInterface{ publicvoidadd(intx,inty) {("和:"+(x+y)); } publicvoidvolume(intx,inty,intz) {("积:"+(x*y*z));}publicstaticvoidmain(String[]args) { MyInterfaced=newInterfaceDemo(); d.add(10,10); d.volume(10,10,10); }}21实现关键字:implements接口有几个方法一定要实现并且一定要加publicpublicclassTestimplementsB{ publicvoidadd(){} publicfloatsum(floatx,floaty){returnx-y;} publicdoublesub(doublex,doubley){returnx-y;}}22例如interfaceA{ inta=4;//必须是赋值,常量 publicabstractvoidmethod1();}classBimplementsA{Publicvoidmethod1(){ System.out.println(2);}}23Continue由于接口中都是抽象方法,所以接口中默认的方法都是abstract并且public,用户在定义抽象方法时,可以省略abstract,public由于接口中的成员量都是常量,所以必须给赋值,final可以省略。24实现多个接口interfacePrintable{}interfaceAddable{}classAimplementsPrintable,Addable25接口与接口之间也可以继承不用去实现方法InterfaceA{}InterfaceBextendsA{}26与类的区别一个类只能继承一个父类,而一个接口那么可以有多个父接口。类继承了父类的方法,可以选择是否覆盖父类的方法;而接口中的方法没有具体实现,因此,实现接口的类必须实现所有的抽象方法。接口允许没有父接口,即接口不存在最高层,而类的最高层是object类。27与抽象类的区别接口中的所有方法都是抽象方法,而抽象类中可以含有非抽象方法。抽象类可以实现接口,但接口不可以继承类。在设计级别上,假设子类有共同的逻辑,那么考虑用抽象类,如几个类之间含有相同的某项功能,那么考虑用接口。28引用类型转换引用类型之间转换的前提:父子关系例如:Employee是父类,Manager是子类Employeeemp=newManager();语法成立因为Manager也是一个Employee但是Managerm=newEmployee()是错误的,Employee肯定是Manager????29classA{//Employee inta=2; publicvoidmethod1(){ System.out.println(1); } publicvoidmethod2(){ System.out.println(2); }}classBextendsA{//Manager inta=3; publicvoidmethod1(){ System.out.println(3); } publicvoidmethod3(){ System.out.println(4); } publicstaticvoidmain(Stringargs[]){ Aa1; a1=newB(); a1.method1(); a1.method2();System.out.println(a1.a);//这个值为多少呢??? //a1.method3(); }}30多态重载方法重写上转型对象接口回调31上转型对象用于继承父类声明的变量,把子类的对象赋予给该变量,我们称作为上转型对象。该对象操作的方法,是重写的方法。属性仍旧是父类的属性。该对象失去了子类自己增加的属性和方法。3233接口回调使用某一个接口的类创立的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。接口回调可以实现多态!34例子355.3包包允许将类组合成较小的单元〔类似文件〕,使其易于找到和使用相应的类文件。包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类。“包将类名空间划分为更加容易管理的块,包既是命名机制也是可见度控制机制

”36包包是一组相关的类和接口的集合。将类和接口分装在不同的包中,可以防止重名类的冲突,有效地平安管理命名空间。默认情况下,java.lang包下的类,系统会自动导入。37包无名包:在缺省情况下,系统〔针对每一java文件〕自动创立。文件中的所有类都隶属这个包类之间可以相互引用非private的属性和方法不能被其他包的类所引用有名包格式:pakage包名;说明:必须置于import语句前,而且是第一行。一个java文件只能有一个包38创立包//filename:ABC.javapackagetest;publicclassABC{ intbase=10; publicvoidshow() { System.out.println(base); }}

声明包39使用包名.类名前缀 如:MyPackage.Circle加载需要使用的类 在程序的开始局部利用import语句加载所需的类。如:importMyPackage.Circle;加载其他类〔包括系统类〕 利用import语句可以加载整个包中的类。 如:importMyPackage.*;包的引用40导入包//filename:PackageTest.javaimporttest.ABC;publicclassPackageTest{ publicstaticvoidmain(String[]args) {

温馨提示

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

评论

0/150

提交评论