面向对象的程序设计第2页第五讲包与接口•包•类的修饰符•方法的修饰符•对象的销毁•接口本章要点面向对象的程序设计面向对象的程序设计1、包(package)为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。面向对象的程序设计第4页javalangSystemioString第5页1、包(package)package语句必须是文件中的第一条语句。也就是说,在package语句之前,除了空白和注释之外不能有任何语句。如果不加package语句,则指定为缺省包或无名包。包对应着文件系统的目录层次结构。在package语句中,用“.”来指明包(目录)的层次。面向对象的程序设计第6页2、编译并生成包在当前目录下生成包◆javac–d.Test.java在指定目录下生成包◆javac–dD:\JavaLessonTest.java面向对象的程序设计第7页3、import语句引入包中的类。◆importjava.io.File;引入整个包。◆importjava.io.*;在同一包中的类可以互相引用,无需import语句。面向对象的程序设计面向对象的程序设计第9页1、类的访问控制符用于声明类的被访问权限public:可被其他所有的类访问default(不加访问说明符时):只能被同一个包中的类访问面向对象的程序设计第10页2、类的其它修饰符final最终类不能被继承,不能再派生出其他子类最终类通常是一些有固定作用、用来完成某种标准功能的类abstract抽象类是它的所有子类的公共属性的集合抽象类不能直接实例化一个对象,只能被继承面向对象的程序设计面向对象的程序设计第12页1、方法的访问控制符publicprotecteddefault(不加访问说明符时)private面向对象的程序设计第13页publicprotecteddefaultprivate同类同包子类通用性不同情形下访问说明符1、方法的访问控制符面向对象的程序设计第14页publicprotecteddefaultprivate同类同包子类通用性不同情形下访问说明符1、方法的访问控制符面向对象的程序设计第15页publicprotecteddefaultprivate同类同包子类通用性不同情形下访问说明符1、方法的访问控制符面向对象的程序设计第16页publicprotecteddefaultprivate同类同包子类通用性不同情形下访问说明符1、方法的访问控制符面向对象的程序设计第17页publicprotecteddefaultprivate同类同包子类通用性不同情形下访问说明符1、方法的访问控制符面向对象的程序设计第18页权限设计的基本原则设计类/方法/域访问权限的基本原则1)所有不必让外人知道的东西都是私有的。2)所有需要向外提供的服务都是公有的。3)所有的祖传绝招,传子不传女的都是保护的。面向对象的程序设计第19页2、方法的其他修饰符staticfinalabstractnativesynchronized面向对象的程序设计第20页2、方法的其他修饰符-final为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。class中所有的private和static方法自然就是final面向对象的程序设计第21页2、方法的其他修饰符-abstract在类中没有方法体的方法,就是抽象方法。含有抽象方法的类,即为抽象类。如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。面向对象的程序设计第22页2、方法的其他修饰符-nativenative方法是用户在Java中可以使用,但不能编写的方法JNI(JavaNativeInterface),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。JNI可以理解为Java和本地应用程序之间的中介。面向对象的程序设计面向对象的程序设计第24页引例沙发是一种椅子,又可以像床一样躺在上面睡觉,如何在面向对象的程序中表达这种关系?接口(interface)是用来实现类间多重继承功能的结构。1)实现多重继承2)提供一种途径,使类隐藏其处理的特定事物的细节,仅对外公布它必须支持的属性3)模块之间的通讯协议4)标志类的类别面向对象的程序设计第25页1、接口的定义定义一个接口,采用关键字interface实现一个接口,采用关键字implements表达了一种“likea”的关系面向对象的程序设计第26页1、接口的定义接口中所有的方法都是publicabstract。在接口中声明方法时,不能使用native、static、final、synchronized、private、protected等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。面向对象的程序设计第27页2、接口中定义常量接口中可以有数据成员,这些成员默认都是publicstaticfinal。只要一个类声明实现了这个接口,就可以直接使用这些常量名注意:这些常量必须被初始化。面向对象的程序设计第28页2、接口中定义常量interfaceMath{doublePI=3.1415926;}classArithmeticimplementsMath{doubleroundArea(doubleradius){returnPI*radius*radius;}}classStudent{publicstaticvoidmain(String[]args){Arithmetica=newArithmetic();System.out.println(a.roundArea(3));System.out.println(Math.PI);//okSystem.out.println(Arithmetic.PI);//okSystem.out.println(a.PI);//ok}}面向对象的程序设计第29页3、接口的扩充面向对象的程序设计一个接口可以继承自另一个接口。Java中不允许类的多继承,但允许接口的多继承。第30页3、接口的扩充interfaceSittable{voidsit();}interfaceLie{voidsleep();}interfaceChairextendsSittable{}interfaceSofaextendsSittable,Lie{}面向对象的程序设计第31页4、接口与类在Java中,一个类可以实现多个接口。一个类在继承另外一个类的同时,可以实现多个接口。面向对象的程序设计第32页4、接口与类-实现多个接口interfaceSittable{voidsit();}interfaceLie{voidsleep();}classSofaimplementsSittable,Lie{publicvoidsit(){}publicvoidsleep(){}}面向对象的程序设计第33页4、接口与类-在继承类的同时实现多个接口interfaceSittable{voidsit();}interfaceLie{voidsleep();}interfaceHealthCare{voidmassage();}classChairimplementsSittable{publicvoidsit(){};}classSofaextendsChairimplementsLie,HealthCare{publicvoidsleep(){};publicvoidmassage(){};}面向对象的程序设计第34页5、接口与抽象类的区别抽象类是一个不完全的类,需要进一步专业化。接口只是一个行为的规范或规定。接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法。一个类一次可以实现若干个接口,但一个类只能扩展一个父类。面向对象的程序设计