Java语言程序设计-第08章.ppt_第1页
Java语言程序设计-第08章.ppt_第2页
Java语言程序设计-第08章.ppt_第3页
Java语言程序设计-第08章.ppt_第4页
Java语言程序设计-第08章.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章,接口和包,一、抽象类和方法,用abstract 修饰的类被称为抽象类。所谓抽象类就是没有具体实例对象的类。抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。它的主要用途是用来描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口”。,定义抽象类,abstract class 类名称 成员变量; 方法(); /定义一般方法 abstract 方法(); /定义抽象方法 说明:抽象类中可以包含有一般方法,也可以包含有抽象方法;对于抽象方法不用完成其代码实现,而在派生的子类中实现所有抽象方法。,Java实例

2、抽象类,public abstract class Shape public double area() return 0.0; public double volume() return 0.0; public abstract String getName(); public class Point extends Shape /通过Shape类继承 protected int x,y; / coordinates of the Point public Point(int a,int b) setPoint(a,b); /带参数的构造器 public void setPoint(int

3、a,int b) x=a; y=b; public int getX() return x; public int getY() return y; public String toString() return +x+,+y+; public String getName() return Point; /实现抽象方法 ,Java实例(续),public class Circle extends Point / 通过Point类继承 protected double radius; public Circle(double r,int a,int b) /带参数的构造器 super(a,b)

4、; / 调用超类构造器 setRadius(r); public void setRadius( double r ) radius=(r=0?r:0); public double getRadius() return radius; public double area() return Math.PI*radius*radius; public String toString() return Center=+super.toString()+Radius=+radius; /引用父类的toString()方法 public String getName() return Circle;

5、 ,Java实例(续),public class Cylinder extends Circle protected double height; / height of Cylinder public Cylinder(double h,double r,int a,int b) super(r,a,b); setHeight(h); public void setHeight(double h) height=(h=0?h:0); public double getHeight() return height; public double area() return 2*super.are

6、a()+2*Math.PI*radius*height; public double volume() return super.area()*height; public String toString() return super.toString()+Height=+height; public String getName() return Cylinder; ,Java实例(续),import javax.swing.JOptionPane; public class Show public static void main(String args) Point point=new

7、Point(7,11); Circle circle=new Circle(3.5,22,8); Cylinder cylinder=new Cylinder(10,3.3,10,10); Shape arrayOfShapes=new Shape3; arrayOfShapes0=point; arrayOfShapes1=circle; arrayOfShapes2=cylinder; String output=point.getName()+:+point.toString()+n+ circle.getName()+:+circle.toString()+n+ cylinder.ge

8、tName()+:+cylinder.toString(); JOptionPane.showMessageDialog(null,output,Demonstrating Polymorphism,JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); ,二、接口,接口可以被用来实现类间多继承结构。接口内部只能定义 public 的抽象方法和静态的、公有常量,因此所有的方法需要在子类中实现。,概念,定义接口,访问权限 interface 接口名称 extends 父接口名1,父接口名2,. /接口体程序 接口体中定义的方法都是抽象、公有的,常

9、量都是静态、公有的。 接口访问权限只有两种:public和缺省状态 。,特点,接口与类比较,有其特殊性。接口可以定义多继承,如果是多继承可以通过使用extends后面的多个父接口来定义。 接口允许没有父接口,即接口不存在最高层,与类的最高层为object类是不同的。 接口中的方法只能被声明为public和abstract,如果不声明,则默认为public abstract;接口中的成员变量只能用public、static和final来定义,如果不声明,则默认为public static final。例如: static double PI=3.14159; 系统默认为public static

10、 final double PI=3.14159; 接口中的方法都是使用abstract修饰的方法。在接口中只给出方法名、返回值和参数表,而不能定义方法体。,接口的实现,class 类名 implements 接口名1, 接口名2 其中:在类中使用implements关键字实现接口,而且对于一个类而言,可以实现多个接口。,Java实例接口,interface Area float calculateArea(); class Circle implements Area float radius; Circle(float r) this.radius=r; public float calc

11、ulateArea() return (float)Math.PI*radius*radius; ,class Rectan implements Area float width; float height; Rectan(float w,float h) this.width=w; this.height=h; ,Java实例(续),public class Interface public static void main(String args) Circle circle=new Circle(5); System.out.println(Circle Area=+circle.ca

12、lculateArea(); Rectan rect=new Rectan(12,6); System.out.println(Rectangle Area=+rect.calculateArea(); ,三、包,包是一组相关的类和接口的集合。将类和接口分装在不同的包中,可以避免重名类的冲突,限定包之间类的访问权限,更有效地管理众多的类和接口。,包的定义,包的定义通过关键字package来实现的 ,package语句的一般形式: package 包名; 若需将类放在包中,只需在程序的第一行写上: package 包名;,存放位置,创建包就是在当前文件夹下创建一个子文件夹,以便存放这个包中包含的

13、所有类的.class文件。 如果包名中含有符号“.”,例如 “MyPackage.MyPackage1”表示在当前目录下子文件夹MyPackage, MyPackage1目录为MyPackage目录子文件夹,.class文件存放在此文件夹下。,包的引用,将类组织成包的目的是为了更好地利用包中的类。 一个类如果需要引用其他包中的非public类,可以采用如下方法: (1)使用包名、类名前缀 如:MyPackage.Circle /在程序中引用其他包中的类 (2)加载需要使用的类 在程序的开始部分利用import语句加载所需的类。 如:import MyPackage.Circle ; (3)加载

14、其他类 利用import语句可以加载整个包中的类。 如: import MyPackage.*;,Java实例包的引用,package bag; /创建包bag,将类放入bag包中 public class X1 int x,y; public X1(int i,int j) this.x=i; this.y=j; System.out.println(x=+x+ +y=+y); public void show() System.out.println(This class is a X1); ,package bag; /创建包bag,将类放入bag包中 public class X2 int m,n; public X2(int i,int j) this.m=i; this.n=j; System.out.println(m=+m+ +n=+n); public voi

温馨提示

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

评论

0/150

提交评论