JAVA-抽象类、接口与包

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第5章抽象类、接口与包2学习目标理解抽象类和接口。掌握创建和导入包的方法。3抽象电器(play)电视机(playvideo)影碟机(playsound)抽象的作用是从一类相似实体中抽取共性的东西,比如任何电器都有一个播放功能,只是具体播放的内容不同而已。45.1抽象类抽象类体现数据抽象的思想,是实现多态的一种手段,其目的是提供可由所有子类共享的一种形式,子类可根据自身需要扩展抽象类。用abstract修饰的类被称为抽象类。5概念抽象类:没有具体实例对象的类。抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。它的主要用途是用来描述概念性的内容和方案,没有具体的实现,这样可以提高开发效率,更好地统一用户“接口”。6定义[修饰符]abstractclass类名{成员变量定义;abstract返回类型方法名([参数列表]);返回类型方法名([参数列表]){}//非抽象方法}7abstract抽象类不能被实例化构造方法和static方法不能是抽象的父类的抽象方法往往在子类中实现特点8说明可包含抽象方法和非抽象方法。但包含抽象方法的类必须为抽象类子类(抽象类除外)继承抽象类时,必须实现所有的抽象方法。abstract不能修饰变量和构造函数、不能与static、private、final并列修饰同一个方法。抽象类不能被实例化。抽象类可以具有指向子类对象的对象引用9示例抽象方法不具有任何实现代码abstractclassShape{protecteddoublelen;//边长长度abstractdoublearea();}classSquareextendsShape{Square(doublenum1){super(num1);}doublearea(){System.out.print(正方形面积为:);returnlen*len;}}10抽象类的使用由于抽象类只是预先确定了总体结构,缺少实际内容或实现过程,又不能被实例化,因此要发挥它的作用,必须被子类继承后,才具有实际意义。继承抽象类的子类(除抽象类外),必须将所有抽象方法重写和实现。11抽象类的作用子类继承该抽象类。当一个非抽象类继承该抽象类,必须实现该抽象类中的全部抽象方法。(非抽象类不应该包含抽象方法)1213注意抽象方法必须在抽象类中进行定义不能用关键字abstract来修饰构造方法关键字static和private不能与abstract组合使用关键字final不能与abstract组合使用14Continue抽象类可以继承抽象类,这样就不用再实现父类的方法。abstractclassA{abstractvoidmethod1();}abstractclassBextendsA{abstractvoidmethod2();}155.2接口接口:可以帮助实现类间多重继承结构。接口是抽象方法和静态常量的集合,因此所有的方法都需要在子类中实现。用途:◇通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。◇通过接口了解对象的交互界面,而无需了解对象所对应的类。◇可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点16举例单继承水果梨北京鸭梨水果类梨香蕉苹果树树木类松树柳树多继承17定义[访问权限]interface接口名[extends父接口1,父接口2,…]{//常量声明[public][static][final]类型常量名=常量值;//抽象方法声明[public][abstract]类型方法名(参数);}18说明接口中的成员变量默认为publicstaticfinal型的,而且值固定。接口中的所有方法默认为publicabstract方法。类(抽象类除外)实现接口,必须实现所有抽象方法。无构造函数,不能被实例化,可以实现多重继承。19示例:创建接口//定义方法的接口publicinterfacemyinterface{publicvoidadd(intx,inty);publicvoidvolume(intx,inty,intz);}//定义程序使用的常量的接口publicinterfacemyconstants{publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}20接口的使用用关键字implements实现接口,例如:classdemoimplementsmyinterface如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示:classdemoimplementsMycalc,Mycount实现接口的类(除抽象类外)必须实现其所有的抽象方法。类在实现时,必须显式地使用public修饰符。21interfaceMyInterface{publicvoidadd(intx,inty);publicvoidvolume(intx,inty,intz);}接口使用示例publicclassInterfaceDemoimplementsMyInterface{publicvoidadd(intx,inty){System.out.println(和:+(x+y));}publicvoidvolume(intx,inty,intz){System.out.println(积:+(x*y*z));}publicstaticvoidmain(String[]args){MyInterfaced=newInterfaceDemo();d.add(10,10);d.volume(10,10,10);}}22实现关键字:implements接口有几个方法一定要实现并且一定要加publicpublicclassTestimplementsB{publicvoidadd(){}publicfloatsum(floatx,floaty){returnx-y;}publicdoublesub(doublex,doubley){returnx-y;}}23例如interfaceA{inta=4;//必须是赋值,常量publicabstractvoidmethod1();}classBimplementsA{Publicvoidmethod1(){System.out.println(2);}}24Continue由于接口中都是抽象方法,所以接口中默认的方法都是abstract并且public,用户在定义抽象方法时,可以省略abstract,public由于接口中的成员量都是常量,所以必须给赋值,final可以省略。25实现多个接口interfacePrintable{}interfaceAddable{}classAimplementsPrintable,Addable26接口与接口之间也可以继承不用去实现方法InterfaceA{}InterfaceBextendsA{}27与类的区别一个类只能继承一个父类,而一个接口则可以有多个父接口。类继承了父类的方法,可以选择是否覆盖父类的方法;而接口中的方法没有具体实现,因此,实现接口的类必须实现所有的抽象方法。接口允许没有父接口,即接口不存在最高层,而类的最高层是object类。28与抽象类的区别接口中的所有方法都是抽象方法,而抽象类中可以含有非抽象方法。抽象类可以实现接口,但接口不可以继承类。在设计级别上,若子类有共同的逻辑,则考虑用抽象类,如几个类之间含有相同的某项功能,则考虑用接口。29引用类型转换引用类型之间转换的前提:父子关系例如:Employee是父类,Manager是子类Employeeemp=newManager();语法成立因为Manager也是一个Employee但是Managerm=newEmployee()是错误的,Employee肯定是Manager????30classA{//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();}}31多态重载方法重写上转型对象接口回调32上转型对象用于继承父类声明的变量,把子类的对象赋予给该变量,我们称作为上转型对象。该对象操作的方法,是重写的方法。属性仍旧是父类的属性。该对象失去了子类自己增加的属性和方法。3334接口回调使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。接口回调可以实现多态!35例子365.3包包允许将类组合成较小的单元(类似文件),使其易于找到和使用相应的类文件。包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类。“包将类名空间划分为更加容易管理的块,包既是命名机制也是可见度控制机制”37包包是一组相关的类和接口的集合。将类和接口分装在不同的包中,可以避免重名类的冲突,有效地安全管理命名空间。默认情况下,java.lang包下的类,系统会自动导入。38包无名包:在缺省情况下,系统(针对每一java文件)自动创建。文件中的所有类都隶属这个包类之间可以相互引用非private的属性和方法不能被其他包的类所引用有名包格式:pakage包名;说明:必须置于import语句前,而且是第一行。一个java文件只能有一个包39创建包//filename:ABC.javapackagetest;publicclassABC{intbase=10;publicvoidshow(){System.out.println(base);}}声明包40使用包名.类名前缀如:MyPackage.Circle加载需要使用的类在程序的开始部分利用import语句加载所需的类。如:importMyPackage.Circle;加载其他类(包括系统类)利用import语句可以加载整个包中的类。如:importMyPackage.*;包的引用41导入包//filename:PackageTest.javaimporttest.ABC;publicclassPackageTest{publicstaticvoidmain(String[]args){ABCobj=newABC();obj.show();}}导入包中的类编译:javac-d.ABC.javaPackageTest.java运行:javaPackageTest42总结抽象类体现数据抽象的思想,是实现多态的一种手段,其目的是提供可由所有子类共享的一种形式,子类可根据自身需要扩展抽象类接口是Java编程一项重要的技术,同过它可以实现多态,同时它也弥补了Java单一继承的不足包提供了一个很好的封装机制,可以有效地避免命名空间的冲突。创建包使用关键字package,导入包使用关键字import。

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功