抽象类和接口

上传人:无*** 文档编号:243837860 上传时间:2024-09-30 格式:PPT 页数:34 大小:273.50KB
返回 下载 相关 举报
抽象类和接口_第1页
第1页 / 共34页
抽象类和接口_第2页
第2页 / 共34页
抽象类和接口_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章,抽象类和接口,假设我们要用面向对象的程序设计方式来构建一套属于自己的图形环境,该怎么做呢?,首先,假设我们的图形环境中出现的所有的图形都是简单图形,它们可以圆形、三角形、正方形或者其他的多边形。,因为这里定义的环境是一个坐标系统,任何一个图形在这个坐标系统里自然都有它的位置,所以我们可以先定义出一个基础类,再给其他的类继承。,class Shape,int,x,y;,void,MoveTo(int,newx,newy,),x=,newx,;,y=,newy,;,而对于各个图形,我们则可以定义不同的类去继承它。例如:,class Square extends Shape,int,length;,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,),ShapeManager,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,所修饰的方法的类也就自动变成抽象类了。,abstract,abstract,抽象类,(abstract class),就是用修饰符,abstract,修 饰的类。在抽象类中,可以定义用修饰符,abstract,修饰的抽象方法。,抽象方法只是一个定义,不能有具体实现的方法。通常抽象类不具备实际功能,只用来派生子类。,抽象方法也必须在子类中被抑制,(overriding),。,抽象类的唯一目的是为子类提供公有信息,,它是用来被继承的,,抽象类不能创建对象。,5,1,抽象类,一、定义,abstract public class Shape,abstract public void Draw();,在此抽象类中定义了抽象方法,Draw(),,,这样所有从,Shape,中派生的类都必须实现这个,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=height;,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(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;,public 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.,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;,public 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),super(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.drawString(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,只支,持单继承,,在遇到需要多继承的情况,可以通过接口,来帮助实现。(多态性),接口的使用是,java,的,OOP,概念中的“多态性”的一种表现。,例如:,类,A,类,B,类,C,吃早餐,(,三明治,);,吃早餐,(,喝咖啡,);,吃早餐,(,三明治,);,吃午餐,(,吃面条,);,吃午餐,(,吃苹果,);,吃午餐,(,吃西餐,);,吃晚餐,(,吃牛排,);,吃晚餐,(,麦当劳,);,吃晚餐,(,自助餐,);,接口是一组抽象行为,其可以结,合到任何类,可以把行为添加到,没有被超类提供的类中。,综合为接口:,接口,一日三餐,吃早餐(),;,吃午餐(),;,吃晚餐(),;,5,3,接口的定义及其使用,一、定义,接口是一组抽象方法定义和常量的集合,在接口中没有提供方法的实现。,Java,的接口是为相互没有关系的类实现同样的一组方法而提供的一种手段。,接口是用来被使用的。,定义方法为:,public interface,接口名,成员变量:,但它们必须是说明为,public,static,和,final,的常量。,成员方法:,这些方法不能够有方法体。如同抽象方法一样,是用,public abstract,修饰的方法。默认为,public,。,说明:,(,1,)象在类中用,abstract,方法一样,在接口内的方法不能具有方法体,一个接口是纯设计,不包含实现。,(,2,)用户必须在自己的类中对接口中的所有方法进行说明;子类可以直接继承使用接口的超类中的各种方法,并能够超越(抑制)或重载它们。,二、接口与抽象类的差别,按照类的封装概念,接 口,抽 象 类,变量,常量:必须同时使用,public,static,和,final 3,个修饰符,没有限制,方法,所有方法只能被声明而不能被定义,并且都是,public,的,至少有一个方法只被声明而没有被定义,用途,被使用,被继承,例如:,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,接口的例子,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,的子类,Square,,,并且实现接口,Shape,publi
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!