j2-3抽象类接口[1].ppt_第1页
j2-3抽象类接口[1].ppt_第2页
j2-3抽象类接口[1].ppt_第3页
j2-3抽象类接口[1].ppt_第4页
j2-3抽象类接口[1].ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 抽象类和接口 假设我们要用面向对象的程序设计方式来构建一套属于自己的图形环境,该怎么做呢? 首先,假设我们的图形环境中出现的所有的图形都是简单图形,它们可以圆形、三角形、正方形或者其他的多边形。 因为这里定义的环境是一个坐标系统,任何一个图形在这个坐标系统里自然都有它的位置,所以我们可以先定义出一个基础类,再给其他的类继承。,class Shape int x, y; void MoveTo(int newx, newy) x=newx; y=newy; ,而对于各个图形,我们则可以定义不同的类去继承它。例如:,class Square extends Shape int length

2、; void Draw() System.out.println(我是正方形); class Circle extends Shape int r;,/以(x,y) 为中心,画出一个边长是length的正方形,void Draw() System.out.println(我是圆形); /以(x,y) 为中心,画出一个半径是r的圆形 ,现在问题来了,看看下面会发生什么?,class ShapeManager void manage(Shape obj) obj.Draw(); ,public class Demo public static void main(String args) Shap

3、eManager shape_man=new ShapeManager(); Square sq=new Square(); Circle ci=new Circle(); shape_man.manage(sq); shape_man.manage(ci); ,当程序在编译时,会因为Shape中并没有Draw这个方法而造成编译错误。于是最好这样做:,class Shape int x,y; void MoveTo(int newx,int newy) x=newx; y=newy; void Draw(); ,这样以来,含有abstract所修饰的方法的类也就自动变成抽象类了。,abstra

4、ct,abstract,抽象类(abstract class)就是用修饰符abstract修 饰的类。在抽象类中,可以定义用修饰符abstract修饰的抽象方法。 抽象方法只是一个定义,不能有具体实现的方法。通常抽象类不具备实际功能,只用来派生子类。抽象方法也必须在子类中被抑制(overriding)。 抽象类的唯一目的是为子类提供公有信息,它是用来被继承的,抽象类不能创建对象。 51 抽象类 一、定义,abstract public class Shape abstract public void Draw(); 在此抽象类中定义了抽象方法Draw(),这样所有从Shape 中派生的类都必须

5、实现这个Draw()方法。 二、应用示例 例子一:抽象类的使用程序(AbstractClass.java) import java.awt.*; import java.applet.*; abstract class Shape, public int x, y; public int width, height; public Shape(int x, int y, int width, int height) /一个构造方法,在抽象类中也可以有常规的方法 this. x = x; this. y = y; this. width = width; this. height = heigh

6、t; abstract double getArea(); /抽象方法只能在抽象类中存在 abstract double getPerimeter();,class Square extends Shape public double getArea() /必须在子类中抑制抽象超类的方法 return(width * height); public double getPerimeter() /在子类中抑制抽象超类的方法 return(2 * width + 2 * height); Square(int x, int y, int width, int height) /构造方法 super

7、(x, y, width, height); ,class Circle extends Shape public double r; public double getArea() /抑制抽象超类的方法 return(r * r * Math. PI); public double getPerimeter() /抑制抽象超类的方法 return(2 * Math. PI * r); ,Circle(int x, int y, int width, int height) /构造方法 super(x, y, width, height ); r=(double)width/2.0; publ

8、ic class AbstractClass extends Applet Square Box = new Square(5, l5, 20, 20); Circle Oval = new Circle(5, 50, 20, 20); public void paint(Graphics g) g. drawRect(Box.x, Box.y, Box.width, Box.height); g. drawString(Area: + Box. getArea(),50,35) ;,g. drawOval(Oval.x, Oval.y, Oval.width, Oval.height); g

9、. drawString(Area: + Oval.getArea(), 50,70); ,例子二:抽象类的使用,程序 (AbstractProduct. java) import java. awt. *; import java. applet. *; abstract class Product double Price, Cost; String Name;,public Product(String Name, double Price, double Cost) this. Name = Name; this. Price = Price; this. Cost = Cost; p

10、ublic abstract String ShowProduct(); class Book extends Product public Book(String Title, double Price, double Cost) super(Title, Price, Cost ); ,public String ShowProduct() return(Book: + Name +Price:$ + Price); class CDROM extends Product public CDROM (String Title, double Price, double Cost) supe

11、r(Title, Price, Cost); public String ShowProduct() return(CD - ROM: + Name + Price: $ + Price); ,public class AbstractProduct extends Applet Book JavaBook = new Book(Java Programming., 39, 30); CDROM JavaLibrary = new CDROM(Java Programmers Library. ,49.95, 39.95 ); public void paint(Graphics g) g.d

12、rawString(JavaBook.ShowProduct(), 5, l5 ); g.drawString(JavaLibrary.Showproduct(),5,45); ,本程序的.html文件为: 运行结果为: Book:Java Programming. Price: $39 CD - ROM: Java Programmers Library. Price: $49. 95,5 . 2 接口 一、为什么要使用接口? 可以将接口理解为一个严格定义的抽象类。接口是一组抽象方法的定义和在类间共享它们的一种方式。 类继承对于重用超类中的代码很有用,而Java只支 持单继承,在遇到需要多继

13、承的情况,可以通过接口 来帮助实现。(多态性) 接口的使用是java的OOP 概念中的“多态性”的一种表现。,例如: 类A 类B 类C 吃早餐(三明治); 吃早餐(喝咖啡); 吃早餐(三明治); 吃午餐(吃面条); 吃午餐(吃苹果); 吃午餐(吃西餐); 吃晚餐(吃牛排); 吃晚餐(麦当劳); 吃晚餐(自助餐); ,接口是一组抽象行为,其可以结 合到任何类,可以把行为添加到 没有被超类提供的类中。,综合为接口: 接口 一日三餐 吃早餐(); 吃午餐(); 吃晚餐();,53 接口的定义及其使用 一、定义 接口是一组抽象方法定义和常量的集合,在接口中没有提供方法的实现。 Java的接口是为相互没

14、有关系的类实现同样的一组方法而提供的一种手段。接口是用来被使用的。 定义方法为: public interface 接口名 成员变量:但它们必须是说明为 public, static 和 final 的常量。,成员方法:这些方法不能够有方法体。如同抽象方法一样,是用public abstract 修饰的方法。默认为public。 说明: (1)象在类中用abstract方法一样,在接口内的方法不能具有方法体,一个接口是纯设计,不包含实现。 (2)用户必须在自己的类中对接口中的所有方法进行说明;子类可以直接继承使用接口的超类中的各种方法,并能够超越(抑制)或重载它们。,二、 接口与抽象类的差别,

15、例如:public interface Shape public abstract void draw(Graphic g); ,public interface Rect extends Shape public abstract void setSize(Dimension size); public abstract Dimension getSize(); 三、使用接口 用 implements 关键字在类的定义中使用接口 例如: public class myapplet extends Applet implements myInterface 类体 ,四、一个实现Java接口的例

16、子,import java.awt.*; import java.applet.*; public interface Shape /定义接口 abstract double getArea(); abstract double getPerimeter(); class Coordinates /定义类Coordinates int x, y;,Coordinates( int x, int y) /构造方法 this. x=x; this. y=y; class Square extends Coordinates implements Shapes /定义类Coordinates的子类S

17、quare,并且实现接口 Shape public int width, height; public double getArea() return (width*height); ,/实现接口中的方法,它必须是public的,public double getPerimeter() return (2*width+2*height); Square (int x,int y,int width,int height) /构造方法 super(x,y); /调用超类的构造方法 this.width=width; this.height=height; / 类Square 定义结束,class

18、 Circle extends Coordinates implements Shapes /定义类Coordinates的子类Circle,并且实现接口 public int width, height; public double r; public double getArea() /在使用接口的类中要显示表示public return (r*r*Math.PI); public double getPerimeter() /实现接口中的方法 return (2*r*Math.PI); ,public Circle(int x,int y,int width,int height) /构

19、造方法 super(x,y); this.width=width; this.height=height; r=(double) width/2.0; /类Circle 定义结束 public class ExtendAndImplement extends Applet Square Box=new Square(5,15,25,25); Circle Oval=new Circle(5,50,25,25);,public void paint(Graphics g) g.drawRect(Box.x,Box.y,Box.width,Box.height); g.drawString(“Ar

20、ea:”+Box.getArea(),50,35); g.drawOval(Oval.x,Oval.y,Oval.width,Oval.height); g.drawString(“Area:”+Oval.getArea(),50,70); ,使用接口的好处: 1先定义一个抽象类的协议而不管其具体实现。 2多个类可共享相同的接口,相互间不用管其它类是如何定义该接口的方法。如果你使用了接口,其它用户就可以了解到如何调用这个类的方法。,类 爷爷 类 奶奶 类 爸爸 类 妈妈 聪明 谦虚 幽默 善良 ,class 小威 extends 爸爸 幽默 java 不支持多继承,所以小威不能用多继承的方式继承大家的优点: class 小威 extends 爸爸,妈妈,爷爷,奶奶,3、间接

温馨提示

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

最新文档

评论

0/150

提交评论