《第9章实现抽象图形——接口与包.ppt》由会员分享,可在线阅读,更多相关《第9章实现抽象图形——接口与包.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第9 9章章 实现抽象图形实现抽象图形接口与包接口与包 能力目标:能力目标:理解关键字理解关键字abstractabstract,能编写抽象方法和抽象类。,能编写抽象方法和抽象类。理解关键字理解关键字interfaceinterface及接口类型,学会定义并实现接口。及接口类型,学会定义并实现接口。理解关键字理解关键字packagepackage、importimport及包的作用,能定义和引入包。及包的作用,能定义和引入包。能在一个包中定义含面积和周长方法的图形接口,在另一个能在一个包中定义含面积和周长方法的图形接口,在另一个包中编写实现图形接口的圆类和半圆类,在第三个包中编写包中编写实现
2、图形接口的圆类和半圆类,在第三个包中编写实现图形接口的正方形类和正方体实现图形接口的正方形类和正方体类。类。内容介绍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声明:可选public abstra
3、ct class 类名 类成员 注意:含有抽象方法的类一定是抽象类,但抽象类不一定含有抽象方法。【例9-1】定义抽象图形类,内含抽象的面积和周长方法。定义继承该类的圆类,重写并实现面积和周长方法。再定义继承抽象图形类的正方形类。最后定义一个运行主类,构建圆和正方形对象,并计算它们的面积和周长。abstract class Shape /抽象图形类public abstract double calcArea();public abstract double calcGirth();class Circle extends Shape /继承抽象图形类的圆类private double radi
4、us;public Circle(double radius)this.radius=radius;public double calcArea()return Math.PI*Math.pow(radius,2);public double calcGirth()return 2*Math.PI*radius;续例9-1class Square extends Shape /继承抽象图形类的正方形类private double border;/边public Square(double border)this.border=border;public double calcArea()ret
5、urn Math.pow(border,2);public double calcGirth()return border*4;public class Example1 Circle aCircle=new Circle(1);System.out.println(构造了一个半径为1的圆);System.out.println(圆面积+aCircle.calcArea();Square aSquare=new Square(1);System.out.println(构造了一个边长为1的正方形);9.2.2 对比抽象类(方法)与最终类(方法)抽象方法只有被派生类重写,才能实现具体功能。抽象类
6、处于类继承层次结构中的顶层。最终类是不能被继承的类,处于类继承层次结构中最底层。最终类与抽象类是水火不相容的。最终方法是不能被派生类重写的方法。最终方法与抽象方法也是水火不相容,最终方法可以存于最终类,也可存于非最终类。关于抽象方法、一般方法与最终方法的作用总结如下:abstract方法只引入方法的名称。一般方法是方法的一个实现。final方法是方法的最后一个实现。9.3 接口类型 9.3.1 接口定义与实现 可选public interface 接口名 常量字段和抽象方法成员 接口体中主要有最终字段(即常量字段)和抽象方法两种成员,都默认为public,其中常量字段允许省略public和fi
7、nal,抽象方法允许省略public和abstract。接口的作用类似抽象类,不过方法只提供抽象的。接口的抽象方法由类来实现。实现接口语法形式如下:可选public等 class 类名 implements 接口表 含实现接口的类成员 实现接口就是定义一个类,为接口的所有抽象方法提供方法体。【例9-2】定义图形接口,内含抽象的面积和周长方法等成员。定义实现该接口的圆类,实现面积和周长方法。再定义实现图形接口的正方形类。最后定义运行主类,构建圆和正方形对象,并计算它们的面积和周长。interface Shapeable /能成形的图形接口public final double MIN_AREA=
8、0;/可以省略public finalpublic final double MIN_GIRTH=0;/可以省略public finalpublic abstract double calcArea();/可以省略public abstractpublic abstract double calcGirth();/可以省略public abstractclass Circle2 implements Shapeable /实现图形接口的圆类private double radius;public Circle2(double radius)this.radius=radius;public d
9、ouble calcArea()/实现计算面积方法return Math.PI*Math.pow(radius,2);public double calcGirth()return 2*Math.PI*radius;续例9-2class Square2 implements Shapeable /实现接口的正方形类private double border;/边public Square2(double border)this.border=border;public double calcArea()return Math.pow(border,2);public double calcGi
10、rth()return border*4;Circle2 aCircle=new Circle2(1);System.out.println(构造了一个半径为1的圆);System.out.println(圆面积+aCircle.calcArea();System.out.println(圆周长 +aCircle.calcGirth();Square2 aSquare=new Square2(1);System.out.println(构造了一个边长为1的正方形);9.3.2 通过接口来引用类接口多态 接口类型可声明变量,通过赋值来引用一个实现该接口的类对象。如可修改例9-2中代码:Shape
11、able aShape;aShape=new Circle2(1);/接口变量引用实对象System.out.println(构造了一个半径为1的圆);aShape=new Square2(1);/引用另一对象System.out.println(构造了一个边长为1的正方形);这种接口回调现象与类的多态性相似,是接口的多态性。因为同样形式的调用,aShape指向的对象不同(圆或正方形),调用的方法也不同,得到的结果当然也不同。9.4 接口多重继承与实现 9.4.1 接口多重继承 接口类型有一个大家族,接口之间也有继承与派生关系。接口允许多重继承,语法:可选public interface 接口
12、名 extends 父接口表 常量字段和抽象方法成员 例如:interface IA .interface IB .interface IC extends IA,IB .9.4.2 类实现多个接口 允许一个类同时实现多个接口,如:class D implements IA,IB .类单一继承的同时,可同时实现多个接口。如:class E .class F extends E implements IA,IB .继承一个父类并实现多个接口的类定义一般形式如下:可选public等 class 类名 extends 父类 implements 接口表 类成员 实现多个接口的类,必须重写各个接口的方
13、法。9.5 包9.5.1 Java系统API包 包就是类、接口等类型的命名存储空间,因此,包又称“类库”。API包功能和部分类型java.langjava.langJavaJava基础类库,提供基础类库,提供Java Java 编程最基本的类和接口,例如编程最基本的类和接口,例如SystemSystem、StringString、MathMath和和ThreadThread类,类,CloneableCloneable和和RunnableRunnable接口接口java.utiljava.util实用工具包,提供实用工具包,提供ArraysArrays、DateDate、RandomRandom
14、、ScannerScanner等类,以及等类,以及CollectionCollection、MapMap等接口等接口java.iojava.io关于数据流与输入输出的包,提供关于数据流与输入输出的包,提供BufferedReaderBufferedReader、BufferedWriterBufferedWriter、FileReaderFileReader、FileWriterFileWriter等类,以及等类,以及DataInputDataInput、DataOutputDataOutput等接口等接口java.awtjava.awt图形用户界面包,常用类有图形用户界面包,常用类有Fram
15、eFrame、ButtonButton、LabelLabel、TextFieldTextField、ColorColor和和GraphicsGraphics等等java.awt.evenjava.awt.event t图形用户界面事件包,类有图形用户界面事件包,类有ActionEventActionEvent和和ItemEventItemEvent等、接口有等、接口有ActionListenerActionListener和和ItemListenerItemListener等等java.appletjava.applet创建小程序的包,有创建小程序的包,有AppletApplet类和类和Aud
16、ioClipAudioClip接口等接口等java.sqljava.sql访问数据库的包,类有访问数据库的包,类有DriverManagerDriverManager等,接口有等,接口有ConnectionConnection、StatementStatement和和ResultSetResultSet等等网络包,有网络包,有SockeSocke和和ServerSocketServerSocket等类等类javax.swingjavax.swing提供提供“轻量级轻量级”图形用户界面组件,类有图形用户界面组件,类有JFrameJFrame、JButtonJButton、JLabelJLabel
17、等等9.5.2 定义包 定义包也叫声明包,语法:package 包名;包语句必须放在源代码首行,一个源程序只能有一个包语句。包名一般采用小写字母,允许分级(分层)命名,以圆点“.”分隔。自定义的包对应文件夹,缺省包对应当前文件夹。例如,定义包语句:package com.fancy;这时,要创建对应的文件夹com fancy。在Eclipse等集成开发环境中,创建包时可自动创建对应的文件夹。注意:分级包的命名往往与网站域名相反,例如:网站域名为,则包名就是com.fancy。【例9-3】定义包com.fancy,在包内放置抽象图形类Shape。package com.fancy;/定义包pub
18、lic abstract class Shape /抽象图形类public abstract double calcArea();/抽象的计算面积方法public abstract double calcGirth();/抽象的计算周长方法在Eclipse环境下编写创建包的应用程序步骤:(1)创建Java项目(2)执行File|New|Package命令(3)执行File|New|Class命令如果执行File|New|Interface菜单命令,则出现New Java Interface对话框,以建立相应的接口。(4)最后输入代码9.5.3 引入包 引入包语句语法:import 包名.*;/
19、其中*号表示所有内容import 包名.类名;import 包名.接口名;一个源程序可使用多个import语句。import语句要放在package语句之后,类(或接口)定义之前。【例9-4】定义包com.fancy.aaa,并引入例9-3定义的包com.fancy。在本包中定义继承com.fancy.Shape类的圆类,并定义运行主类,构建圆对象,计算圆面积和周长。package com.fancy.aaa;/定义包import com.fancy.*;/引入包class Circle extends Shape /继承com.fancy.Shape类的圆类private double ra
20、dius;public Circle(double radius)this.radius=radius;public double calcArea()/重写并实现计算面积方法return Math.PI*Math.pow(radius,2);public double calcGirth()return 2*Math.PI*radius;续例9-4public class Example4 /主类public static void main(String args)Circle aCircle=new Circle(1);System.out.println(构造了一个半径为1的圆);Sy
21、stem.out.printf(圆面积:%.2f,aCircle.calcArea();System.out.printf(n圆周长:%.2f,aCircle.calcGirth();【例9-5】定义包com.fancy.bbb,在该包中定义继承com.fancy.Shape类的正方形类(需引入例9-3定义的包com.fancy)。定义主类,在主类的main方法中构建正方形对象,计算其面积和周长。com fancy bbb Square.java文件:package com.fancy.bbb;/定义包import com.fancy.*;/引入包public class Square ext
22、ends Shapeprivate double border;/边public Square(double border)this.border=border;public double calcArea()/重写并实现计算面积方法return Math.pow(border,2);public double calcGirth()return border*4;续例9-5,com fancy bbb Example4.java文件:package com.fancy.bbb;/声明包public class Example5 /主类public static void main(Strin
23、g args)Square aSquare=new Square(1);System.out.println(构造了一个边长为1的正方形);System.out.printf(正方形面积:%.2f,aSquare.calcArea();System.out.printf(n正方形周长:%.2f,aSquare.calcGirth();9.6 本章小结 抽象方法是没有方法体的方法,而抽象类则是使用abstract声明的类。抽象方法与最终方法相对,方法不能同时是抽象和最终的。抽象类与最终类也不兼容,它们处于类层次结构中的两端。接口是一种类型,接口的成员方法都是抽象的,接口的成员字段都是最终的常量字段。接口是多重继承的。一个类能同时实现多个接口。接口声明的变量,能引用实现接口的各个类对象(接口多态)。包也称类库。Java系统定义了不少API包。也可自定义包,并在其它包中引用。包属于大模块,类或接口是中模块,方法则属于小模块。9.7 实训9:实现图形接口(1)编程,在一个包中定义含面积和周长方法的图形接口,在另一个包中编写实现图形接口的圆类和半圆类。(2)编程,在上题基础上,在第三个包中编写实现图形接口的正方形类和正方体类。谢谢!返回目录返回目录 结束放映结束放映