Java核心及基础应用Java面向对象思想及核心课件_第1页
Java核心及基础应用Java面向对象思想及核心课件_第2页
Java核心及基础应用Java面向对象思想及核心课件_第3页
Java核心及基础应用Java面向对象思想及核心课件_第4页
Java核心及基础应用Java面向对象思想及核心课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第一阶段 Java核心及基础应用 -Java面向对象思想及核心 杨振宇 2011 . 11第1页,共30页。Java 面向对象思想及核心 一、接口、抽象类二、内部类、匿名类和包 三、字符串类 四、异常处理 五、JDK 核心API和高级类 六、图形界面编程 七、IO输入输出流 八、多线程九、集合框架后续:网络编程、JDBC前期基础:Java基础、面向对象编程、类和继承 第2页,共30页。6.1.1 类的定义人:张三?李四?电话机?茶具?沙发?第3页,共30页。一、接口和抽象类 1、接口的概念2、接口的实现3、抽象类和抽象方法4、接口回调5、接口作参数6、类的多态第4页,共30页。Java语言中,

2、一个子类只可以继承一个直接父类,这被称为单一继承。使用单一继承虽然各个类之间的层次关系清楚、可读性强,但是在处理一些复杂问题时,则会显得功能不够强大。因此,Java语言提供了接口功能,来实现多重继承。接口是用来组织类内容的一种程序结构,一个类可以有多个接口。在Java语言中,一个对象的行为一般是与其具体的实现细节分开的。这种对象行为与行为的具体实现细节分离的设计方法称为抽象。1、接口的概念第5页,共30页。在Java语言中,使用接口来定义某个类所支持的操作。因此,在接口中,所有的方法均为抽象方法。接口定义的仅仅是实现某一特定功能的接口和其规范,而并没有真正实现这个功能。这个功能的真正实现是在应

3、用这个接口的类中完成的,要由类来具体定义接口中各个抽象方法的语句体。 例如:如果我们定义了一个名为Calculate的接口,其中有add()和minus()两个抽象方法,那么任何实现该接口的类都必须支持其中的add()和minus()方法,也就是说在类中具体描述这两个方法的语句体内容。 1、接口的概念第6页,共30页。创建接口的形式如下。public interface 接口名 public static final 类型 变量名 = 常量数据; public abstract 方法类型 方法名( 参数 ); 其中,关键字interface是用来定义接口的,接口名要符合Java对标识符的规定,

4、public是接口的唯一访问控制修饰符。如果没有使用任何访问控制修饰符,则表示只有与该接口定义在同一个包中的类才可以访问这个接口。接口中的变量只能是常量形式的变量,方法也必须是抽象方法。因为接口中的方法均是使用修饰符public和关键字abstract修饰的,所以在书写时可以省略这两个单词。2、接口的实现第7页,共30页。例如:在下面的接口程序中,我们定义了2个常量和3个抽象方法。interface Calculate int i = 10; String s = 计算结果如下。 boolean isZhishu(); int add( int a, int b ); double minus

5、( int a, int b ); 创建接口仅仅给出了抽象方法,如果要具体的实现接口所定义的方法,则需要某个类为接口中的每个抽象方法定义具体的操作来实现这个接口的功能。2、接口的实现第8页,共30页。实现接口的形式为:public class 类名 implements 接口名1, 接口名2, 语句体 其中,使用关键字implements来定义这个类的接口,一个类可以实现多个接口,使用逗号将它们分隔开。注意三点: 1)如果实现某个接口的类不是使用关键字abstract修饰的抽象类,则在类中必须定义实现接口所有抽象方法的具体实例方法,并且该方法必须与接口中的方法定义完全一致,也就是说具有完全相同

6、的参数个数和类型,以及方法的返回类型。2、接口的实现第9页,共30页。 2)如果实现某个接口的类是使用关键字abstract修饰的抽象类,则它可以不实现该接口所有的方法。但是在这个抽象类的任何一个非抽象子类中,必须具体定义其父类所实现的接口中的所有抽象方法。另外,可以定义一个新的接口,用extend关键字去继承一个已有的接口; 3)接口的抽象方法的访问控制符均为public,所以类在实现这些抽象方法时,必须使用public修饰符。例如:public interface Num int num = 10; public void printNum();public class TestNum i

7、mplements Num public void printNum() System.out.println( Num= + Num ); 2、接口的实现第10页,共30页。 抽象类的意义与接口基本一样,都是为了更好的控制类的抽象结构。定义抽象类的形式为:abstract class 类名 语句体1)抽象类中的方法可以是实例方法,也可以抽象方法。但是如果一个类含有抽象方法,则此类必须为抽象类。而其如果一个类是抽象类的子类且其不是抽象类,则该子类必须实现父类的所有抽象方法。2)抽象方法定义了一个抽象类的功能,但是没有给出该功能的具体实现过程。定义抽象方法的形式为: abstract 方法类型

8、方法名( 参数 );3)抽象方法不能使用修饰符static和final修饰。3、抽象类和抽象方法第11页,共30页。 接口与抽象类有相似之处,但也有区别,下表反映了两者的区别。3、抽象类和抽象方法第12页,共30页。案例 接口的实现与运用目的:(1)学习如何定义接口;(2)掌握接口的实现方式;(3)使用实现了接口的类;(4)理解接口与抽象类的区别。任务: 设计和实现一个 Soundable 接口,该接口具有发声功能,同时还能够调节声音大小。Soundable接口的这些功能将会由3种声音设备来具体实现,它们分别是收音机Radio、随身听Walkman 和手机Mobilephone。最后还要设计一

9、个应用程序类来使用这些实现了Soundable 接口的声音设备类。程序运行时,先询问用户想听哪种设备,然后程序就会按照该设备的工作方式来发出声音。程序运行的效果如图所示。第13页,共30页。思考:(1)请问在InterfaceTest 类中,SoundDevice数组是什么类型的,该数组为什么能存放3种不同的对象Radio、Walkman 和Mobilephone 呢?(2)在程序中,Soundable 是一个接口,那么该接口是否可以被实例化呢?请在InterfaceTest 类的main()方法中加入以下语句试验一下,并分析结果。案例 接口的实现与运用第14页,共30页。(3)现在假定要为程

10、序增加一个闹钟类Clock,该类也实现Soundable 接口,能够发出滴答声,请将以下的Clock 类加入到InterfaceTest.java 程序中,并在InterfaceTest 类的main()方法中加入SoundDevice3 = new Clock();语句。修改之后,重新编译 InterfaceTest.java 并运行它,观察结果。案例 接口的实现与运用第15页,共30页。(4)在第(3)小题中由于新加入的Clock 类仅仅实现了Soundable 接口的stopSound()和playSound()方法,而increaseVolume()和decreaseVolume()方

11、法没有实现,因此它实质上是一个抽象类,而抽象类是不能实例化的,所以导致编译错误。但是按照常理,闹钟的滴答声确实是不可以增大或减小的,那么如何解决这个问题呢?现在请在Clock 类中加入下面两个含空方法体的方法实现,再编译运行程序,看看会有什么变化。案例 接口的实现与运用(5)现在请模仿本实验的程序设计出一个自己的接口程序,要求先设计一个moveable可移动接口,然后分别设计3个类,即汽车Car、轮船Ship、飞机Aircraft 来实现该接口,最后设计一个应用程序来使用它们。第16页,共30页。4、接口回调接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该

12、接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法。实例运行第17页,共30页。5、接口作参数一个方法的参数是接口类型,就可以将任何实现该接口的类的实例的引用传递给该接口参数,接口参数就可以回调类实现的接口方法。 实例运行第18页,共30页。6、类的多态1)多态的概念2)动态绑定第19页,共30页。 多态是指程序的多种表现形式。除了方法的重载,子类对父类方法的覆盖或者子类对抽象父类中的抽象方法的具体定义也是类多态的一种表现形式。 所谓覆盖,是在定义子类的方法时,使用与其父类中相同的名称和参数。在执行程序时,将执行子类的方法

13、,而覆盖父类的方法。1)多态的概念第20页,共30页。例如:public double sum( double a, double b ) return a + b;在子类中有方法名和参数都完全相同,但是语句体内容不同的方法public double sum( double a, double b ) return a * b;当编写应用程序,通过子类对象调用sum()方法时,只会执行子类中求积的方法,而不会执行父类中求和的方法。 1)多态的概念第21页,共30页。利用多态性,可以将一个方法的形参设为超类类型,而将传递给该方法的实参既可以是超类对象也可以是子类对象。具体执行时,Java 会自动

14、根据实际对象所属的类型来选择方法执行,因此多态性增强了编程的灵活性和系统的维护性和可扩展性。1)多态的概念第22页,共30页。2)动态绑定在 Java 中超类往往定义出一个通用的方法,而其不同的实现则由它的不同的子类来完成。当通过对象来调用这样一个方法时,Java会依据运行时该对象的实际类型来决定用方法的哪一个版本来执行,也即动态地绑定一个方法来执行。动态绑定的前提是:Java 允许将子类对象赋给超类类型的变量,每个子类对象同时也是其超类的对象。第23页,共30页。案例 多态性与动态绑定目的:(1)掌握多态性在继承中的运用;(2)理解动态绑定的含义;(3)学会使用抽象类;(4)了解成员变量的隐

15、藏。任务: 请设计3个类,分别是学生类Student,本科生类Undergraduate,研究生类Postgraduate,其中Student 类是一个抽象类,它包含一些基本的学生信息如姓名、所学课程、课程成绩等,而Undergraduate 类和Postgraduate 都是Student 类的子类,它们之间的主要差别是计算课程成绩等级的方法有所不同,研究生的标准要比本科生的标准高一些,如下表所示。第24页,共30页。本科生标准研究生标准80100优秀90100优秀7079良好8089良好6069一般7079一般5059及格6069及格50 以下不及格60以下不及格 假设某班级里既有本科生也

16、有研究生,请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组,既能存放本科生对象,又能存放研究生对象,程序的运行效果如图所示。案例 多态性与动态绑定第25页,共30页。思考:(1)在Polymorphism 类中有一个循环语句用来计算每个学生的成绩等级 for (int i = 0; I 5; i+) studentsi.calculateGrade(); 请问这里的 calculateGrade()方法是按照研究生的标准还是按照本科生的标准来计算的。(2)请问在程序Polymorphism 类中,哪些语句体现了子类的对象可以赋值给父类的引用变量。案例 多态性与动态绑定第

17、26页,共30页。(3)现在请在程序Polymorphisrn 类的main()方法中添加如下的语句Student st = new Student(李明);此时编译是否会报错,如有错误,请解释原因。(4)在程序中要判断studenti中存放的究竟是Undergraduate 对象还是Postgraduate 对象,只需要调用studenti.getType()方法即可,然而Java 提供了一个instanceof 运算也可以完成这一任务,它能判断出一个对象所属的类,请将以下代码添加到程序中进行测试。案例 多态性与动态绑定第27页,共30页。(5)现在请模仿本程序,新增一个高中生类,它计算成绩等级的标准采用如下方法,然后在主程序中测试并使用它。案例 多态性与动态绑定第28页,共30页。使用接口要点 如果一个类使用了某个接口,那么这个类必须实该接口的所有方法,即为这些方法提供方法体。在类中实现接口的方法时,方法的名字、返回类参数个数及类型必须与接口中的完全一致。接口中的方法被默认是public的,所以类在实现口方法时,一定要用public来修饰。如果接口方法名有返回类型,那么在类中实现该口方法时,方法体至少要有一个return

温馨提示

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

评论

0/150

提交评论