CreatedwithSmartPrintertrailversion接口–与抽象类一样都是定义多个类的共同属性–使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现–允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体–也可以包含基本数据类型的数据成员,但它们都默认为static和finalCreatedwithSmartPrintertrailversion接口的作用–是面向对象的一个重要机制–实现多继承,同时免除C++中的多继承那样的复杂性–建立类和类之间的“协议”l把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节l实现不同类之间的常量共享接口CreatedwithSmartPrintertrailversion接口的作用及语法——与抽象类的不同接口CreatedwithSmartPrintertrailversion保险公司的例子–具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable接口–在UML图中,实现接口用带有空三角形的虚线表示5.1.1接口的作用及语法——例5_1InterfaceInsurableCompanyPersonCar接口CreatedwithSmartPrintertrailversion接口的语法–声明格式为[接口修饰符]interface接口名称[extends父接口名]{…//方法的原型声明或静态常量}–接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字–接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字5.1.1接口的作用及语法接口CreatedwithSmartPrintertrailversion接口声明如下,可见其中的方法都是抽象方法publicinterfaceInsurable{publicintgetNumber();publicintgetCoverageAmount();publicdoublecalculatePremium();publicDategetExpiryDate();}5.1.1接口的作用及语法——例5_1保险接口的声明接口CreatedwithSmartPrintertrailversion,可利用它来实现二维的几何形状类Circle和Rectangle–把计算面积的方法声明在接口里–pi值是常量,把它声明在接口的数据成员里interfaceShape2D{//声明Shape2D接口finaldoublepi=3.14;//数据成员一定要初始化publicabstractdoublearea();//抽象方法}–在接口的声明中,允许省略一些关键字,也可声明如下interfaceShape2D{doublepi=3.14;doublearea();}5.1.1接口的作用及语法——例5_2接口CreatedwithSmartPrintertrailversion接口的实现–接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象–利用接口设计类的过程,称为接口的实现,使用implements关键字–语法如下publicclass类名称implements接口名称{/*Bodiesfortheinterfacemethods*//*Owndataandmethods.*/}l必须实现接口中的所有方法l来自接口的方法必须声明成public接口CreatedwithSmartPrintertrailversion,声明汽车类实现例5.1中的Insurable接口,实现接口中的所有抽象方法publicclassCarimplementsInsurable{publicintgetPolicyNumber(){//writecodehere}publicdoublecalculatePremium(){//writecodehere}publicDategetExpiryDate(){//writecodehere}publicintgetCoverageAmount(){//writecodehere}publicintgetMileage(){//新添加的方法//writecodehere}}5.1.2实现接口——例5_3接口CreatedwithSmartPrintertrailversion对象可以被转型为其所属类实现的接口类型–getPolicyNumber、calculatePremium是Insurable接口中声明的方法–getMileage是Car类新添加的方法,Insurable接口中没有声明此方法Carjetta=newCar();Insurableitem=(Insurable)jetta;//对象转型为接口类型item.getPolicyNumber();item.calculatePremium();item.getMileage();//接口中没有声明此方法,不可以jetta.getMileage();//类中有此方法,可以((Car)item).getMileage();//转型回原类,可调用此方法了5.1.2实现接口——对象转型接口CreatedwithSmartPrintertrailversion实现接口——例5_4classCircleimplementsShape2D{doubleradius;publicCircle(doubler){radius=r;}publicdoublearea(){return(pi*radius*radius);}}classRectangleimplementsShape2D{intwidth,height;publicRectangle(intw,inth){width=w;height=h;}publicdoublearea(){return(width*height);}}l声明Circle与Rectangle两个类实现Shape2D接口接口CreatedwithSmartPrintertrailversion{publicstaticvoidmain(Stringargs[]){Rectanglerect=newRectangle(5,6);System.out.println(Areaofrect=+rect.area());Circlecir=newCircle(2.0);System.out.println(Areaofcir=+cir.area());}}l运行结果Areaofrect=30.0Areaofcir=12.565.1.2实现接口——例5_4运行结果接口CreatedwithSmartPrintertrailversion声明接口类型的变量,并用它来访问对象publicclassVariableTester{publicstaticvoidmain(String[]args){Shape2Dvar1,var2;var1=newRectangle(5,6);System.out.println(Areaofvar1=+var1.area());var2=newCircle(2.0);System.out.println(Areaofvar2=+var2.area());}}l输出结果Areaofvar1=30.0Areaofvar2=12.565.1.2实现接口——例5_5接口CreatedwithSmartPrintertrailversion接口定义了所有“可移动对象”能做的事情publicinterfaceMovableObject{publicbooleanstart();publicvoidstop();publicbooleanturn(intdegrees);publicdoublefuelRemaining();publicvoidchangeSpeed(doublekmPerHour);}5.1.2实现接口——MovableObject接口接口CreatedwithSmartPrintertrailversion