您好,欢迎访问三七文档
JAVA语言程序设计第八章接口和包Java程序设计的步骤1、先定义抽象类或接口2、通过继承或实现完成(使其具体化)相应子类的定义3、将这些类编译后打包,即在类文件前加package包名4、以后应用可直接通过import包名.类名引用包5、这样设计的java程序,主函数简单明了抽象类和方法抽象类是专门设计为子类继承的类,抽象类通常都包括一个或多个抽象方法(只有方法说明,没有方法体),抽象方法体中内容,根据继承抽象类的子类的实际情况,有子类完成其抽象方法的代码。定义抽象类的一般形式abstractclass类名称{成员变量;方法();//定义一般方法abstract方法();//定义抽象方法}注意无论抽象类和抽象方法都以关键字abstract开头说明:(1)抽象类体中,可以包含抽象方法,也可以不包含抽象方法,但是类体中包含抽象方法的类必须定义为抽象类。(2)抽象类不能实例化,即使抽象类中没有抽象方法,也不能实例化。(3)抽象类的子类只有给出每个抽象方法的方法体,即覆盖每个抽象方法后,才能创建子类对象。如果一个抽象方法未在子类中覆盖,该子类也必须申明为抽象方法。抽象类的实现科技书类读者群科技人员显示图书种类计算图书价格计算打折折扣文艺书类读者群大众人员显示图书种类计算图书价格计算打折折扣教材类读者群学生显示图书种类计算图书价格计算打折折扣三类图书不存在继承关系,它们虽然都具有显示图书种类、计算图书价格、计算打折折扣的功能,但具体计算办法不同,这时可以通过定义抽象类先确定它们的共同属性和要做的事(抽象方法),然后再子类中分别实现这些抽象方法。这样做的好处是简化程序设计,易排错,提高编程效率。abstractclassBook8_1{intbookPage;//图书页码floatdiscount;//图书折扣doubleprice;//图书价格abstractvoidshow();//显示图书种类abstractdoublegetPrice(intbookPage,floatdiscount);publicBook8_1(intbookpage,floatdiscount){//构造方法this.bookPage=bookPage;this.discount=discount;}publicvoidshow_price(){//显示价格System.out.println(thisbook'spriceis+price);}}定义抽象类:以上完成了定义抽象类,将它作为父类由子类继承classScience_bookextendsBook8_1{//定义科技书类publicScience_book(intbookPage,floatdiscount){super(bookPage,discount);//引用父类的构造方法}publicvoidshow(){//实现抽象类方法System.out.println(thisbook'skindisscience);}publicdoublegetPrice(intbookPage,floatdiscount){returnbookPage*0.1*discount;}}classLiterrature_bookextendsBook8_1{//定义文艺书类publicLiterrature_book(intbookPage,floatdiscount){super(bookPage,discount);}publicvoidshow(){System.out.println(thisbook'skindisLiterrature);}publicdoublegetPrice(intbookPage,floatdiscount){returnbookPage*0.08*discount;}}classTeaching_bookextendsBook8_1//定义教材类{publicTeaching_book(intbookPage,floatdiscount){super(bookPage,discount);}publicvoidshow(){System.out.println(thisbook'skindisTeaching);}publicdoublegetPrice(intbookPage,floatdiscount){returnbookPage*0.05*discount;}}三种图书在定义自己的构造方法时,继承了父类的构造方法,实现了显示图书种类和计算图书价格的抽象方法。下面编制科技图书类、文艺图书类和教材类对象,以及引用它们的方法。publicclassBooksell8_1{publicstaticvoidmain(Stringargs[]){Science_bookbb=newScience_book(530,0.7f);//创建科技书类对象bb.price=(int)bb.getPrice(530,0.7f);//引用科技书类方法,计算图书价格bb.show();//显示图书种类bb.show_price();//引用父类方法,显示图书价格Literrature_bookll=newLiterrature_book(530,0.7f);//创建文艺书类对象ll.price=(int)ll.getPrice(530,0.7f);//引用文艺书类方法,计算图书价格ll.show();//显示图书种类ll.show_price();//引用父类方法,显示图书价格Teaching_booktt=newTeaching_book(530,0.7f);//创建教材类对象tt.price=(int)tt.getPrice(530,0.7f);//引用教材类方法,计算图书价格tt.show();//显示图书种类tt.show_price();//引用父类方法,显示图书价格}}Shape类Cylinder类Point类Circle类继承继承继承例8-2有多个类分别是Shape类、Point类、Circle类和Cylinder类,他们的关系如图:程序采取先定义一个抽象类Shape,通过继承关系生成Point类,再通过继承Point类生成Circle类,最后通过继承Circle类生成Cylinder类。每一个类都是继承上一个类,而每一个类都是对它的父类的继承和扩充。并且实现了抽象类中定义的抽象方法多继承的实现本程序有Shape8_2java、Point8_2.java、Circle8_2.java、Cylinder8_2.java四个配套文件,它们不需要进行单独编译抽象类只给出方案,由继承它的子类去实现定义的抽象方法//多继承的实现Show8_2.java配套文件1//抽象类只给出方案,由继承它的子类去实现定义的抽象方法publicabstractclassShape8_2{publicdoublearea(){return0.0;};publicdoublevolume(){return0.0;};publicabstractStringgetName();}//多继承的实现Show8_2.java配套文件2//抽象类只给出方案,由继承它的子类去实现定义的抽象方法publicclassPoint8_2extendsShape8_2{protectedintx,y;//coordinatesofthePointpublicPoint8_2(inta,intb){setPoint(a,b);};publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetX(){returnx;}publicintgetY(){returny;}publicStringtoString(){return[+x+,+y+];}publicStringgetName(){returnPoint;}}//多继承的实现Show8_2配套文件3//抽象类只给出方案,由继承它的子类去实现定义的抽象方法publicclassCircle8_2extendsPoint8_2{protecteddoubleradius;publicCircle8_2(doubler,inta,intb){super(a,b);setRadius(r);}publicvoidsetRadius(doubler){radius=(r0?r:0);}publicdoublegetRadius(){returnradius;}publicdoublearea(){returnMath.PI*radius*radius;}publicStringtoString(){returnCenter=+super.toString()+Radius=+radius;}publicStringgetName(){returnCircle;}}//多继承的实现Show8_2.java配套文件4//抽象类只给出方案,由继承它的子类去实现定义的抽象方法publicclassCylinder8_2extendsCircle8_2{protecteddoubleheight;publicCylinder8_2(doubleh,doubler,inta,intb){super(r,a,b);setHeight(h);}publicvoidsetHeight(doubleh){height=(h0?h:0);}publicdoublegetHeight(){returnheight;}publicdoublearea(){return2*super.area()+2*Math.PI*radius*height;}publicdoublevolume(){returnsuper.area()*height;}publicStringtoString(){returnsuper.toString()+Height=+height;}publicStringgetName(){returnCylinder;}}importjavax.swing.JOptionPane;publicclassShow8_2{publicstaticvoidmain(Stringargs[]){Point8_2point=newPoint8_2(7,11);//创建Point对象并引用Point类带参数的构造方法Circle8_2circle=newCircle8_2(3.5,22,8);Cylinder8_2cylinder=newCylinder8_2(10,3.3,10,10);Shape8_2arrayOfShapes[]=newShape8_2[3];arrayOfShapes[0]=point;arrayOfShapes[1]=circle;arrayOfShapes[2]=cylinder;Stringoutput=point.getName()+:+point.toString()+\n+circle.getName()+:+circle.toString()+\n+cylinder.getName()+:+cylinder.toString();JOptionPane.showMessageDialog(null,output,DemonstringPolymorphism,JOptionPane.INFORMATION_MESSAGE);//屏幕上输出结果System.exit(0);}}水果梨北京鸭梨继承继承水果类树木类梨松树苹果树香蕉柳树多继承接口接口是用来实现类间多重继承的结构模式。接口类似于抽象类和抽象方法,它只提供一些方法模板,自己不去实现而由其他类去实现。接口的关键字为interface定义接口接口是一种特殊的类,它由两部分组成:接口说明和接口体。一般形式为:[访问权限]interface接口名[extends父接口名1,…,父接口名n]{….//接口体程序}接口体中只允许有常量和抽象方法,接口的访问权限只有
本文标题:第八章接口和包
链接地址:https://www.777doc.com/doc-3218350 .html