Java抽象类和接口.ppt

上传人:小飞机 文档编号:5436090 上传时间:2023-07-06 格式:PPT 页数:34 大小:268.49KB
返回 下载 相关 举报
Java抽象类和接口.ppt_第1页
第1页 / 共34页
Java抽象类和接口.ppt_第2页
第2页 / 共34页
Java抽象类和接口.ppt_第3页
第3页 / 共34页
Java抽象类和接口.ppt_第4页
第4页 / 共34页
Java抽象类和接口.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《Java抽象类和接口.ppt》由会员分享,可在线阅读,更多相关《Java抽象类和接口.ppt(34页珍藏版)》请在三一办公上搜索。

1、Core Java,抽象类和接口,Java中的抽象类、接口和程序包抽象类与抽象方法,抽象类:用abstract关键字来修饰一个类时,该类叫做抽象类;抽象类必须被继承。抽象类不能被直接实例化。它只能作为其它类的超类,这一点与最终类(final类)正好相反。抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法。抽象方法必须被重写抽象方法只有声明,不能有实现。定义了抽象方法的类必须是抽象类。abstract returnType abstractMethod(paramlist);,两个类Circle和Rectangle,完成相关参数的计算,class Rectangle public

2、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,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个

3、循环,加上一个加法,这种做法是不漂亮的。如果还有其它形状:Triangle,Ellipses等,上述方法显得“累赘”。我们希望有一种统一的表示,例如用一个数组shape,接受所有的形状,然后用:for(i=0;ishape.length;i+)area_total+=shapei.area();,Java中的抽象类、接口和程序包抽象类与抽象方法,Java中的抽象类、接口和程序包抽象类与抽象方法,抽象类和最终类,声明抽象类与抽象方法public abstract class PlaneGraphics1/平面图形类,抽象类 public abstract double area();/计算面积,

4、抽象方法,分号“;”必不可少,使用abstract关键字,抽象方法只有方法声明,没有方法体,抽象类和最终类,规定:抽象类不能被直接实例化,只有它的非抽象子类可以创建对象抽象类中不一定包含抽象方法,但有抽象方法的类必定是抽象类抽象类中的抽象方法只是声明,不包含方法体,即不给出方法的实现构造方法、类方法不能声明为抽象方法抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类,抽象类和最终类,抽象类的意义:描述抽象的概念,规定必须实现的方法的统一接口关于抽象类和抽象方法Abstracttest.java,抽象类和最终类,最终类和最终方法final关键字修饰的类称为最终类,最终类不能被

5、继承final关键字修饰的方法称为最终方法,最终方法不能被覆盖最终方法和最终类没有必然的对应关系,Java中的接口 入门知识,1、含义:一组只有成员函数原型定义而无成员函数定义体的方法集。接口定义了一组成员函数,但没有具体加以实现,其实现则是由实现该接口的类来加以具体完成的。2、作用:为若干个类(相关或无关的类)定义一组相同的功能行为,从而达到相同的功能名称,不同的功能实现之目的;另外也可以实现类似C+语言中的多重继承但又避免了虚基类的编程。,接口的概念,在构建问题的类过程中,我们经常会遇到一种特殊的情况,在描述某个类的各个方法时,对每个方法我们只能给出其功能实现的要求(原形声明)但不能给出具

6、体的功能实现(函数定义体)。因为我们所处理的问题只是一个泛泛的功能说明,并没有针对某一具体类型的问题来说明。,设计出实现图像显示功能的设备时,可以只给出功能实现的要求显示图像 调整图像,在投影仪中实现显示图像调整图像,在电视机中实现显示图像调整图像,您觉得接口抽象吗?,接口定义格式,要点:类似于类的定义格式,只是以 interface作为定义符。格式:接口的类型interface接口名常量(并且必须初始化);成员方法定义(只有原形而无函数定义体);或:接口的类型interface 派生的接口名extends 父接口名列表 接口中的成员变量定义;接口中的成员方法原型定义;,实现接口,方法:通过定

7、义一个类同时采用implements来指明所实现的接口名,并在该类中重写接口中的所有成员方法且给出成员函数体定义。要点类中所实现的接口中的成员函数的原型都应该与它在 接口中的原型定义保持一致;并在类中重写接口中的所有成员方法;通过实现接口,从而可扩充或增加该类的功能。接口只定义方法名,而类实现接口内部的方法的代码接口的继承只是继承接口本身,而非代码,从而不会产生重复继承多次。,一个类可以实现多个接口实现接口的类必须给出接口中所有方法的具体实现!除非这个类是抽象类接口的作用接口提供了完全的抽象说明所有实现该接口的类应具有的形式接口中的方法在多个实现接口的类中表现出多态性接口回调接口也是引用数据类

8、型,指向接口的引用也可以指向任意实现了该接口的类创建的实例接口回调,即接口的引用可以指向实现了接口的类的实例例子:Interfacetest.java,注意,程序实例,interface Computerpublic void ComputeData();/计算机应该有数据计算的功能public void SaveData();/计算机应该有存储数据的功能public void PrintData();/计算机应该有打印数据的功能public void DisplayData();/计算机应该有显示数据的功能,定义出接口,实现只给出功能的描述,在设计PC机时来实现它自己的功能,class PC

9、Computer 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 PrintD

10、ata()public void DisplayData(),抽象类和接口的对比,接口和类是很相似但又有区别的一种数据结构,其设计和调用也是JAVA程序设计的一种重要技术。从结构上看,接口有如下特点:接口用interface来定义,而不是class接口中定义的变量去全部是最终的静态变量接口中没有自身的构造方法,不能创建实例,而定义的 其他方法全是抽象方法,即提供了方法的定义,但是没有提供方法的实现。接口采用多重继承机制,而不是采用单一的继承机制。,接口与抽象类的区别抽象类和接口中主要关心的都是抽象,而不关心具体的实现。但也有一些区别:一个类只能继承一个类,但可以实现多个接口抽象类表示一种继承关

11、系,接口只说明功能二者的区别主要体现在对问题域的理解上,抽象类的应用,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

12、abstract void setChannel();public abstract void receiveImage();在描述某一个问题时,如果不能给出任何的功能实现,应该采用接口来描述。,内部类,声明内部类在一个类中包含另一个类的定义内部类可以在类、方法甚至语句块中定义内部类可以是private或protected的,见例子:TestGoods.java,在这个例子里类Content和GDestination被定义在了类Goods内部,并且分别有着protected和private修饰符来控制访问级别。Content代表着Goods的内容,而GDestination代表着Goods的目

13、的地。它们分别实现了两个接口Content和Destination。在后面的main方法里,直接用 Contents c和Destination d进行操作,你甚至连这两个内部类的名字都没有看见!这样,内部类的第一个好处就体现出来了 隐藏你不想让别人知道的操作,也即封装性。同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢?当然有,其语法格式如下:outerObject=new outerClass(Constructor Parameters);outerClass.

14、innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);,注意,在创建非静态内部类对象时,一定要先创建起相应的外部类对象。至于原因,也就引出了我们下一个话题 非静态内部类对象有着指向其外部类对象的引用,对刚才的例子稍作修改:TestGoods1.java,注意,在修改的代码里我们给Goods类增加了一个private成员变量valueRate,意义是货物的价值系数,在内部类Content的方法value()计算价值时把它乘上。我们发现,value()可以访问valueRate,这也是内部类的第二个好处

15、一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外想要创建内部类对象必须先创建其外部类对象的原因。有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:outerClass.this 有了它,我们就不怕

16、这种屏蔽的情况了。,内部类,关于内部类非静态内部类具有指向其外部类的引用,可以访问外部类中的成员,当内部类中定义了与外部类同名的成员时,可以使用“宿主类的名称.this.成员”的格式访问外部类的成员。内部类可以被定义为静态的,静态内部类没有指向外部类的引用,只能访问外部类的类成员。任何非静态内部类中不能有静态数据、静态方法或者静态内部类。,内部类,内部类作用与接口一起实现完整的多重继承内部类作用InnerClass.java内部类具有访问外部类的引用,/内部类引用外部类的成员public class Inner2class aaint a=1;class bbint b=2;class cc/

17、这对括号必须有,因为类中语句必须包含在一个代码块或方法体中int b=4;int c=3;System.out.println(cc);System.out.println(cc.c=+c);System.out.println(bb.b=+bb.this.b);/内部类引用外部类成员System.out.println(aa.a=+);,内部类,匿名内部类当只需创建一个类的对象而用不上它的名字时,可以使用匿名内部类匿名内部类由于没有名字,所以它没有带名字的构造函数java的匿名内部类的语法规则看上去有些古怪,当你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上去简洁清楚。

18、它的语法规则是这样的:new interfacename().;或 new superclassname().;,有一点需要注意的是,匿名内部类由于没有名字,所以它没有带名字的构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:如果是在一个方法内部的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为final。将匿名内部类改造成有名字的局部内部类,这样它就可以拥有有名字的构造函数了。在这个匿名内部类中使用初始化代码块。例子

19、:Test.java,匿名内部类实例class PackBox interface Goods/定义内部接口String getName();Goods SportShoe()return new Goods()/匿名内部类String name=运动鞋;int price=200;public String getName()return name;/事实上匿名内部类必须继承一个类或实现一个接口,内部类小结,为什么需要内部类?java内部类有什么好处?为什么需要内部类?首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。不过你可能要质疑,更改一下方法的不就行了吗?的确,以此作为设计内部类的理由,实在没有说服力。真正的原因是这样的,java中的内部类和接口加在一起,可以解决常被C+程序员抱怨java中存在的一个问题 没有多继承。实际上,C+的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。,练习,正确设置“人”问题中的“工作”接口在“工作”接口中包含有如下的行为定义沟通职位升迁完成任务指标,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号