Java抽象类和接口

上传人:xuex****hao 文档编号:245546606 上传时间:2024-10-09 格式:PPT 页数:34 大小:268.49KB
返回 下载 相关 举报
Java抽象类和接口_第1页
第1页 / 共34页
Java抽象类和接口_第2页
第2页 / 共34页
Java抽象类和接口_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,Core Java,抽象类和接口,Java中的抽象类、接口和程序包,抽象类与抽象方法,抽象类,:用,abstract,关键字来修饰一个类时,该类叫做抽象类;,抽象类必须被继承。,抽象类不能被直接实例化。它只能作为其它类的超类,这一点与最终类(,final,类)正好相反。,抽象方法,:用,abstract,来修饰一个方法时,该方法叫做抽象方法。,抽象方法必须被重写,抽象方法只有声明,不能有实现。,定义了抽象方法的类必须是抽象类。,abstract,returnType,abstractMethod,(,paramlist,);,两个类,Circle,和,Rectangle,,,完成相关参数的计算,class Rectangle,public float width,height;,Rectangle(float w,float h),width=w;,/这里不需this,height=h;,public float area(),return width*height;,class Circle,public float r;,Circle(float r),this.r=r;,/this指这个对象的,public float area(),return 3.14*r*r;,Java中的抽象类、接口和程序包,抽象类与抽象方法,假设有若干个,Circle,,,以及若干个,Rectangle,,,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个循环,加上一个加法,这种做法是不漂亮的。,如果还有其它形状:,Triangle,,,Ellipses,等,上述方法显得“累赘”。我们希望有一种统一的表示,例如用一个数组,shape,,,接受所有的形状,然后用:,for(i=0;ishape.length;i+),area_total+=shapei.area();,Java中的抽象类、接口和程序包,抽象类与抽象方法,abstract class Shape,abstract float area();,class Rectangle extends Shape,public float width,height;,Rectangle(float w,float h),width=w;/这里不需this,height=h;,public float area(),return width*height;,class Circle extends Shape,public float r;,Circle(float r),this.r=r;/this指这个对象的,public float area(),return 3.14*r*r;,Java中的抽象类、接口和程序包,抽象类与抽象方法,抽象类和最终类,声明抽象类与抽象方法,public abstract class PlaneGraphics1/平面图形类,抽象类,public abstract double area();/计算面积,抽象方法,分号“;”必不可少,使用abstract关键字,抽象方法只有方法声明,没有方法体,抽象类和最终类,规定:,抽象类不能被直接实例化,只有它的非抽象子类可以创建对象,抽象类中不一定包含抽象方法,但有抽象方法的类必定是抽象类,抽象类中的抽象方法只是声明,不包含方法体,即不给出方法的实现,构造方法、类方法不能声明为抽象方法,抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类,抽象类和最终类,抽象类的意义:,描述抽象的概念,规定必须实现的方法的统一接口,关于抽象类和抽象方法,Abstracttest.java,抽象类和最终类,最终类和最终方法,final关键字修饰的类称为最终类,最终类不能被继承,final关键字修饰的方法称为最终方法,最终方法不能被覆盖,最终方法和最终类没有必然的对应关系,Java,中的接口,入门知识,1、含义:一组只有成员函数原型定义而无成员函数定义体的方法集。接口定义了一组成员函数,但没有具体加以实现,其实现则是由实现该接口的类来加以具体完成的。,2、作用:,为若干个类(相关或无关的类)定义一组相同的功能行为,从而达到相同的功能名称,不同的功能实现之目的;,另外也可以实现类似C+语言中的多重继承但又避免了虚基类的编程。,接口的概念,在构建问题的类过程中,我们经常会遇到一种特殊的情况,在描述某个类的各个方法时,对每个方法我们只能给出其功能实现的要求(原形声明)但不能给出具体的功能实现(函数定义体)。因为我们所处理的问题只是一个,泛泛的功能说明,,并没有针对某一具体类型的问题来说明。,设计出实现图像显示功能的设备时,可以只给出功能实现的要求,显示图像,调整图像,在投影仪中实现,显示图像,调整图像,在电视机中实现,显示图像,调整图像,您觉得接口抽象吗?,接口定义格式,要点:类似于类的定义格式,只是以,interface,作为定义符。,格式:,接口的类型,interface,接口名,常量(,并且必须初始化,);,成员方法定义(,只有原形而无函数定义体,);,或:,接口的类型,interface,派生的接口名,extends,父接口名列表,接口中的成员变量定义;,接口中的成员方法原型定义;,实现接口,方法:,通过定义一个类同时采用,implements,来指明所实现的接口名,并在该类中重写接口中的,所有成员方法,且给出成员函数体定义。,要点,类中所实现的接口中的成员函数的原型都应该与它在 接口中的原型定义保持一致;,并在类中重写接口中的,所有,成员方法;,通过实现接口,从而可扩充或增加该类的功能。,接,口只定义方法名,而类实现,接,口内部的方法的代码,接,口的继承只是继承接口本身,而非代码,从而不会产生重复继承多次。,一个类可以实现多个接口,实现接口的类必须给出接口中所有方法的具体实现!除非这个类是抽象类,接口的作用,接口提供了完全的抽象,说明所有实现该接口的类应具有的形式,接口中的方法在多个实现接口的类中表现出多态性,接口回调,接口也是引用数据类型,指向接口的引用也可以指向任意实现了该接口的类创建的实例,接口回调,即接口的引用可以指向实现了接口的类的实例,例子:,Interfacetest.java,注意,程序实例,interface Computer,public void ComputeData();/计算机应该有数据计算的功能,public void SaveData();/计算机应该有存储数据的功能,public void PrintData();/计算机应该有打印数据的功能,public void DisplayData();/计算机应该有显示数据的功能,定义出接口,实现只给出功能的描述,在设计PC机时来实现它自己的功能,class PCComputer implements Computer,/实现它的计算、存储和打印数据、显示数据的功能,public void ComputeData(),public void SaveData(),public void PrintData(),public void DisplayData(),Sun公司在Solaris机中实现它的功能,class SunSolarisComputer implements Computer,Sun在设计Solaris机时实现它的功能,public void ComputeData(),public void SaveData(),public void PrintData(),public void DisplayData(),抽象类和接口的对比,接口和类是很相似但又有区别的一种数据结构,其设计和调用也是,JAVA,程序设计的一种重要技术。,从结构上看,接口有如下特点:,接口用,interface,来定义,而不是,class,接口中定义的变量去全部是最终的静态变量,接口中没有自身的构造方法,不能创建实例,而定义的,其他方法全是抽象方法,即提供了方法的定义,但是没有提供方法的实现。,接口采用多重继承机制,而不是采用单一的继承机制。,接口与抽象类的区别,抽象类和接口中主要关心的都是抽象,而不关心具体的实现。但也有一些区别:,一个类只能继承一个类,但可以实现多个接口,抽象类表示一种继承关系,接口只说明功能,二者的区别主要体现在对问题域的理解上,抽象类的应用,abstract class Person,private int ID;,private String Name;,public abstract void Eat(Food obj);,public void Step(Feet obj),public void Sleep(),在描述某一个问题时,如果只能给出部分的功能实现,而不能给出全部的功能实现时,应该采用抽象类来描述。,接口,的应用,interface TV,public int Size=29;,public abstract void showImage();,public abstract void setChannel();,public abstract void receiveImage();,在描述某一个问题时,如果不能给出任何的功能实现,应该采用接口来描述。,内部类,声明内部类,在一个类中包含另一个类的定义,内部类可以在类、方法甚至语句块中定义,内部类可以是private或protected的,见例子:TestGoods.java,在这个例子里类Content和GDestination被定义在了类Goods内部,并且分别有着protected和private修饰符来控制访问级别。Content代表着Goods的内容,而GDestination代表着Goods的目的地。它们分别实现了两个接口Content和Destination。在后面的main方法里,直接用 Contents c和Destination d进行操作,你甚至连这两个,内部类的,名字都没有看见!这样,,内部类的,第一个好处就体现出来了 隐藏你不想让别人知道的操作,也即封装性。,同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢?当然有,其语法格式如下:,outerObject=new outerClass(Constructor Parameters);,outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);,注意,在创建非静态内部类对象时,一定要先创建起相应的外部类对象。至于原因,也就引出了我们下一个话题 非静态内部类对象有着指向其外部类对象的引用,对刚才的例子稍作修改:,TestGoods1.java,注意,在修改的代码里我们给Goods类增加了一个private成员变量valueRate,意义是货物的价值系数,在内部类Content的方法value()计算价值时把它乘上。我们发现,value()可以访问valueRate,这也是,内部类的,第二个好处 一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外想要创建内部类对象必须先创建其外部类对象的原因。,有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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