第9章实现抽象图形-接口与包_第1页
第9章实现抽象图形-接口与包_第2页
第9章实现抽象图形-接口与包_第3页
第9章实现抽象图形-接口与包_第4页
第9章实现抽象图形-接口与包_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第9章实现抽象图形

——接口与包能力目标:理解关键字abstract,能编写抽象方法和抽象类;理解关键字interface及接口类型,学会定义并实现接口;理解关键字package、import及包的作用,能定义和引入包;能在一个包中定义含面积和周长方法的图形接口,在另一个包中编写实现图形接口的圆类和半圆类,在第三个包中编写实现图形接口的正方形类和正方体类。内容介绍9.1任务预览9.2抽象方法与抽象类9.3接口类型9.4接口多重继承与实现9.5包9.6本章小结9.7实训9:实现图形接口9.1任务预览本章实训程序运行结果:

9.2抽象方法与抽象类

9.2.1抽象方法与抽象类

在类中声明抽象方法的语法形式:可选public等abstract返回类型方法名(可选参数表);包含抽象方法的类,无法实例化,即不能构建对象,是抽象类。抽象类也用关键字abstract声明:可选publicabstractclass类名{类成员}抽象类中除抽象方法外,还可有非抽象的成员。注意:含有抽象方法的类一定是抽象类,但抽象类不一定含有抽象方法。【例9-1】定义抽象图形类,内含抽象的面积和周长方法。定义继承该类的圆类,重写并实现面积和周长方法(未完)。abstractclassShape{//抽象图形类

publicabstractdoublecalcArea(); publicabstractdoublecalcGirth();}classCircleextendsShape{//继承抽象图形类的圆类

privatedoubleradius; publicCircle(doubleradius){this.radius=radius;} publicdoublecalcArea(){ returnMath.PI*Math.pow(radius,2); } publicdoublecalcGirth(){return2*Math.PI*radius;}}【例9-1】(续)再定义继承抽象图形类的正方形类。最后定义一个运行主类,构建圆和正方形对象,并计算它们的面积和周长。classSquareextendsShape{//继承抽象图形类的正方形类

privatedoubleborder;//边

publicSquare(doubleborder){this.border=border;} publicdoublecalcArea(){ returnMath.pow(border,2); } publicdoublecalcGirth(){returnborder*4;}}publicclassEx1{… CircleaCircle=newCircle(1); System.out.println("构建半径为1的圆"); System.out.printf("圆面积:%.2f",aCircle.calcArea()); … SquareaSquare=newSquare(1); System.out.println("\n构建边长为1的正方形");…}9.2.2对比抽象类(方法)与最终类(方法)抽象方法只有被派生类重写,才能实现具体功能。抽象类处于类继承层次结构中的上层。最终类不能被继承,处于类继承层次结构中的最底层。最终类与抽象类是水火不相容的。最终方法是不能被派生类重写的方法。最终方法与抽象方法也是水火不相容,最终方法可以存于最终类,也可存于非最终类。关于抽象方法、一般方法与最终方法的作用总结如下:abstract方法只引入方法的名称。一般方法是方法的一个实现。final方法是方法的最后一个实现。

9.3接口类型

9.3.1接口定义与实现

可选publicinterface接口名{常量字段和方法成员}接口体中的成员主要是常量字段和非静态的抽象方法。接口成员均默认为public,其中常量字段允许省略关键字public、static和final,声明时一定要赋值。JDK8版本允许接口含有静态的非抽象方法。接口的作用类似抽象类,接口的抽象方法由类实现。实现接口语法形式:可选public等class类名implements接口表{含实现接口的类成员}实现接口即定义一个类,为接口的所有抽象方法提供方法体。【例9-2】】定义图形接口,内含常量字段和抽象的计算面积和周长方法。定义实现该接口的圆类,实现计算面积和周长方法(未完)。interfaceShapeable{//能成形的图形接口 doubleMIN_AREA=0;//字段默认为publicstaticfinal doubleMIN_GIRTH=0; doublecalcArea();

//非静态方法默认为publicabstract doublecalcGirth();}classCircle2implementsShapeable{//实现图形接口的圆类

privatedoubleradius; publicCircle2(doubleradius){this.radius=radius;} publicdoublecalcArea(){//实现计算面积方法

returnMath.PI*Math.pow(radius,2); } publicdoublecalcGirth(){return2*Math.PI*radius;}}【例9-2】(续)再定义实现图形接口的正方形类,也实现计算面积和周长方法。最后定义一个主类,构建圆和正方形对象,并计算它们的面积和周长。classSquare2implementsShapeable{//实现接口的正方形类

privatedoubleborder;//边

publicSquare2(doubleborder){this.border=border;} publicdoublecalcArea(){returnMath.pow(border,2);} publicdoublecalcGirth(){returnborder*4;}}publicclassEx2{… Circle2aCircle=newCircle2(1); System.out.println("构建半径为1的圆"); System.out.printf("圆面积:%.2f",aCircle.calcArea()); … Square2aSquare=newSquare2(1); System.out.println("构建了一个边长为1的正方形");…}9.3.2通过接口来引用类——接口多态接口类型可声明变量,通过赋值来引用一个实现该接口的类对象。如可修改例9-2中代码:

ShapeableaShape; aShape=newCircle2(1);//接口变量引用对象

System.out.println("构建半径为1的圆");… aShape=newSquare2(1);//引用另一对象

System.out.println("构建边长为1的正方形");…这种接口回调现象与类的多态性相似,是接口的多态性。同样形式的调用,aShape指向的对象不同,调用的方法也不同,结果当然也不同。

9.4接口多重继承与实现

9.4.1接口多重继承

接口类型拥有一个大家族,接口之间也有继承与派生关系。接口允许多重继承,语法:可选publicinterface接口名extends父接口表

{常量字段和方法成员}如:interfaceIA{...}interfaceIB{...}interfaceICextendsIA,IB{...}9.4.2类实现多个接口允许一个类同时实现多个接口,如:classDimplementsIA,IB{...}类单一继承的同时,可同时实现多个接口。如:classE{...}classFextendsEimplementsIA,IB{...}继承一个父类并实现多个接口的类定义形式:可选public等class类名extends父类implements接口表{类成员}实现多个接口的类,必须重写各个接口的抽象方法。

9.5包

9.5.1Java系统API包包就是类、接口等类型的命名存储空间,因此,包又称“类库”。API包功能和部分类型java.langJava基础类库,提供Java编程最基本的类和接口,例如System、String、Math和Thread类,Cloneable和Runnable接口java.util实用工具包,提供Arrays、Date、Random、Scanner等类,以及Collection<E>、Map<K,V>等接口java.io关于输入输出流的包,提供BufferedReader、FileReader、FileWriter等类,以及DataInput、DataOutput等接口java.awt图形用户界面包,常用类有Frame、Button、Label、TextField、Color和Graphics等java.awt.event图形用户界面事件包,类有ActionEvent和ItemEvent等、接口有ActionListener和ItemListener等java.applet创建小程序的包,有Applet类和AudioClip接口等java.sql访问数据库的包,类有DriverManager等,接口有Connection、Statement和ResultSet等网络包,有Socke和ServerSocket等类javax.swing提供“轻量级”图形用户界面组件,类有JFrame、JButton、JLabel等9.5.2定义包定义包也叫声明包,语法:package包名;包语句必须放在程序首行,一个源程序只能有一个包语句。包名一般采用小写字母,允许分级(层)命名,以点.分隔。自定义的包对应文件夹,缺省包对应当前文件夹。例如,定义包语句:packagecom.fancy;这时,对应的文件夹com\fancy。在Eclipse开发环境中,创建包会自动创建对应的文件夹。注意:分级包的命名往往与网站域名相反,如:域名为,则包名是com.fancy。【例9-3】定义包com.fancy,再在包中定义一个图形接口Shapeable,内含抽象的计算面积和周长方法。packagecom.fancy;//定义包publicinterfaceShapeable{//图形接口 doublecalcArea();//省略了publicabstract doublecalcGirth();}在Eclipse环境下编写含有包的应用程序步骤:(1)创建Java项目(2)执行File|New|Package命令(3)执行File|New|Class或Interface命令(4)最后输入代码9.5.3引入包引入包语句语法:import包名.*;//其中*号表示所有内容import包名.类名;import包名.接口名;一个源程序可使用多个import语句。import语句要放在:package语句之后,类(接口)定义之前。【例9-4】新建包com.fancy.aaa,并引入例9-3的包com.fancy。在新建包中定义实现com.fancy.Shapeable接口的圆类(未完)。packagecom.fancy.aaa;//定义包importcom.fancy.*;

//引入包classCircleimplementsShapeable{//实现接口的圆类 privatedoubleradius; publicCircle(doubleradius){//构造方法 this.radius=radius; } publicdoublecalcArea(){//实现接口计算面积方法 returnMath.PI*Math.pow(radius,2); } publicdoublecalcGirth(){//实现接口计算周长方法 return2*Math.PI*radius; }}【例9-4】(续)再定义一个主类,构建圆对象,计算其面积和周长。publicclassEx4{

//主类 publicstaticvoidmain(String[]args){ CircleaCircle=newCircle(1); System.out.println("构建半径为1的圆"); System.out.printf("圆面积:%.2f",aCircle.calcArea()); System.out.printf("\n圆周长:%.2f",aCircle.calcGirth()); }}【例9-5】新建包com.fancy.bbb,在包中先定义实现com.fancy.Shapeable接口的正方形类(需引入例9-3定义的包com.fancy)(未完)。存放正方形类的com\fancy\bbb\Square.java源文件:packagecom.fancy.bbb;

//定义包importcom.fancy.Shapeable;//引入包(接口)publicclassSquareimplementsShapeable{//实现接口正方形类 privatedoubleborder;

//边 publicSquare(doubleborder){//构造方法 this.border=border; } publicdoublecalcArea(){//实现接口方法 returnMath.pow(border,2); } publicdoublecalcGirth(){ returnborder*4;

}

}【例9-5】(续)再定义一个主类,在main方法中构建正方形对象,计算其面积和周长。存放主类的com\fancy\bbb\Ex5.java源文件:packagecom.fancy.bbb;//声明包publicclassEx5{

//主类

publicstaticvoidmain(String[]ar

温馨提示

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

评论

0/150

提交评论