《Java SE程序设计及实践》课件05-第5章 抽象类、接口和内部类_第1页
《Java SE程序设计及实践》课件05-第5章 抽象类、接口和内部类_第2页
《Java SE程序设计及实践》课件05-第5章 抽象类、接口和内部类_第3页
《Java SE程序设计及实践》课件05-第5章 抽象类、接口和内部类_第4页
《Java SE程序设计及实践》课件05-第5章 抽象类、接口和内部类_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

-1-掌握抽象类的定义及使用掌握接口的定义及使用了解内部类的使用目标-2-抽象类-1抽象类

在面向对象的概念中,所有的对象都是通过类来表述,但并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类。

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

抽象类和接口两种机制的引入,使Java拥有了强大的面向对象编程能力。抽象类需要注意以下几点:abstract放在class前,指明该类是抽象类;abstract放在方法声明中,则该方法是抽象方法,抽象方法没有方法体;一个抽象类可以含有多个抽象方法,也可以含有已实现的方法。-3-抽象类-2抽象类实例

定义一个类Shape来演示抽象类的定义和使用。publicabstractclassShape{ doubledim; publicShape(doubledim){ this.dim=dim; } //抽象方法,获得面积

publicabstractdoublecallArea(); //抽象方法,获得周长

publicabstractdoublecallPerimeter();}未实现的方法-4-抽象类-3抽象类的使用实例定义Shape类一个的子类Circle来演示抽象类的使用。publicclassCircleextendsShape{ publicCircle(doubledim){ super(dim); } //实现抽象方法callArea() publicdoublecallArea(){ //返回圆的面积

return3.14*dim*dim; } //实现抽象方法callPerimeter() publicdoublecallPerimeter(){ //返回圆的周长

return2*3.14*dim; } publicstaticvoidmain(String[]args){ //声明一个Shape对象,指向实现它的子类对象

Shapeshape=newCircle(10); //调用callArea()求圆的面积,并输出

System.out.println("圆的面积是:"+shape.callArea()); //调用callPerimeter()求圆的周长,并输出

System.out.println("圆的周长是:"+shape.callPerimeter()); }}执行结果如下:圆的面积:314.0圆的周长:62.800000000000004-5-抽象类-4抽象类的特点

抽象类虽然具备类的形式,但由于其“抽象”性,不能定义抽象类的实例,即不能为抽象类分配具体空间;Shapecircle=newShape(3);这是错误的!抽象类不能实例化。可以通过如下方式来实例一个抽象类ShapesomeShape;//引用Circle类的实例对象someShape=newCircle(5);someShape.callArea();注意:抽象类不能实例化,但可以指向一个实现它的子类对象;

abstract不能与final同时修饰一个类;

abstract不能和static、private、final或native并列修饰同一方法。-6-接口-1接口概述Java是单继承的语言,利用接口可以模拟多继承;接口是对抽象类的进一步抽象,是方法声明和常量的定义集合;接口是一种行为规范,是一种“契约”;具体格式如下所示:抽象类表示的是一种继承关系,一个类只能使用一次继承关系,这样限制了类的多重体现。如何解决这个问题呢?<访问符>interface

接口名{ [访问符]<返回类型>方法名([参数列表]);

......}-7-接口-2接口实例

定义一个接口MultiInterface.java来演示接口中常量的定义。publicinterfaceMultiInterface{ publicstaticfinaldoublePI=3.1415926; publicvoidcallArea(); defaultvoidbefore(){//仅限于JDK8.0以后可使用 System.out.println("现在开始计算:"); }}同抽象类一样,接口是一种更加“虚拟”的类结构,无法对接口实例化。通常情况下:接口中的变量一定是publicstaticfinal的,接口中的方法一定是publicabstract的注意:在定义接口的时候,接口中的所有方法和常量自动定义为public。

接口中定义的变量默认是publicstaticfinal型,且必须赋初值。

从JDK8.0开始可以使用default关键字来定义一个默认的方法

来扩展接口,default关键字修饰的默认方法可以直接调用,

不用子类去实现。-8-接口-3接口的使用

接口的使用通过“implements”关键字来实现,示例代码如下:publicclassMyClassimplementsMyInterface{

publicvoidadd(intx,inty){ //dosomething }

publicvoidvolume(intx,inty,intz){ //dosomething }}多重继承

通过实现多个接口来实现多重继承,示例代码如下:publicclassMyClass2implements

MyInterface,MultiInterface{ ......//实现多个接口中的所有方法}-9-抽象类与接口抽象类与接口的区别抽象类中可以有非抽象方法。JDK8.0之前接口中则不能有实现方法;接口中定义的变量默认是publicstaticfinal型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值;接口中的方法默认都是publicabstract类型的。-10-instanceof运算符Instanceof

声明为同种类型的两个引用变量调用同一个方法时也可能会有不同的行为。为更准确的鉴别一个对象的真正类型,Java语言引入了instanceof操作符,其使用格式如下:<引用类型变量>instanceof<引用类型>当instanceof左侧的引用类型变量所引用对象的实际类型是其右侧给出的类型或其子类类型时,整个表达式的结果为true,否则为false。-11-对象类型转换引用数据类型转换

引用类型数据转换时,同样可以分为自动转换和强制转换两种情况:

自动转换:子类转换成父类时(或者实现类转换成接口)可以自动完成。例如,Teacher是Person的子类,将一个Teacher对象赋给一个Person类型的变量时,转换自动完成。强制转换:父类转换成子类时(或者接口转换成实现类),必须使用强制转换。例如,Teacher类是Person的子类,如果将一个Person对象赋给一个Teacher类型变量的时候,必须使用强制转换。//创建一个Teacher对象,把引用赋予Person类型的变量p,该过程自动转换Personp=newTeacher();//把变量p强制转换成Teacher类型的变量Teachert=(Teacher)p;-12-内部类-1内部类

内部类是指在一个类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。引入内部类的主要原因是:内部类能够隐藏起来,不为同一包的其他类访问;内部类可以访问其所处外部类的所有属性;在回调方法处理中,匿名内部类尤为便捷,特别是GUI中的事件处理Java内部类主要有成员内部类、局部内部类、静态内部类、匿名内部类四种。-13-内部类-2成员内部类

成员内部类的定义结构很简单,就是在“外部类”的内部定义一个类。

局部内部类

在方法中定义的内部类称为局部内部类。与局部变量类似,局部内部类不能用public或private访问修饰符进行声明。它的作用域被限定在声明该类得方法块中。局部内部类的优势在于,它可以对外界完全隐藏起来,除了所在的方法之外,对其他方法而言是透明的。静态内部类

当内部类只是为了将其隐藏起来,不需要内部类对象与其外部类的对象之间有联系时,可以将内部类声明为static,称为静态内部类。静态内部类可以用public,protected,private修饰,不能访问外部类的非静态成员。

内部类-3-14-匿名内部类 将局部内部类特殊化——如果只创建一个类的一个对象,可以考虑匿名内部类,在GUI事件处理中大量用到。匿名内部类就是没有名字的内部类。如:JButtonbutton=newJButton("button");button.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ System.out.println("ButtonClicked"); }});创建一个实现ActionListener接口类的新对象,需要实现的方法actionPerformed定义在new操作紧跟的大括号内。-15-内部类-4适合使用匿名内部类的情况:只用到类的一个实例,后面不会再用到这个类了;类在定义后马上用到;类非常小。使用匿名内部类需遵循的原则:匿名内部类

温馨提示

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

评论

0/150

提交评论