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

下载本文档

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

文档简介

1、第一阶段 Java核心及基础应用 -Java面向对象思想及核心,Java 面向对象思想及核心,一、Java基础 二、面向对象编程 三、继承与多态性 四、接口和包 五、字符串类 六、异常处理 七、高级类 八、图形界面编程 九、IO输入输出流 十、多线程 十一、网络编程 十二、集合框架,四、接口和包,1、接口的概念 2、接口的实现 3、抽象类和抽象方法 4、接口回调 5、接口作参数 6、包的概念 7、定义和使用包,Java语言中,一个子类只可以继承一个直接父类,这被称为单一继承。使用单一继承虽然各个类之间的层次关系清楚、可读性强,但是在处理一些复杂问题时,则会显得功能不够强大。因此,Java语言提

2、供了接口功能,来实现多重继承。 接口是用来组织类内容的一种程序结构,一个类可以有多个接口。 在Java语言中,一个对象的行为一般是与其具体的实现细节分开的。这种对象行为与行为的具体实现细节分离的设计方法称为抽象。,1、接口的概念,在Java语言中,使用接口来定义某个类所支持的操作。因此,在接口中,所有的方法均为抽象方法。接口定义的仅仅是实现某一特定功能的接口和其规范,而并没有真正实现这个功能。这个功能的真正实现是在应用这个接口的类中完成的,要由类来具体定义接口中各个抽象方法的语句体。 例如:如果我们定义了一个名为Calculate的接口,其中有add()和minus()两个抽象方法,那么任何实

3、现该接口的类都必须支持其中的add()和minus()方法,也就是说在类中具体描述这两个方法的语句体内容。,1、接口的概念,创建接口的形式如下。 public interface 接口名 public static final 类型 变量名 = 常量数据; public abstract 方法类型 方法名( 参数 ); 其中,关键字interface是用来定义接口的,接口名要符合Java对标识符的规定,public是接口的唯一访问控制修饰符。如果没有使用任何访问控制修饰符,则表示只有与该接口定义在同一个包中的类才可以访问这个接口。接口中的变量只能是常量形式的变量,方法也必须是抽象方法。因为接口

4、中的方法均是使用修饰符public和关键字abstract修饰的,所以在书写时可以省略这两个单词。,2、接口的实现,例如:在下面的接口程序中,我们定义了2个常量和3个抽象方法。 interface Calculate int i = 10; String s = 计算结果如下。 boolean isZhishu(); int add( int a, int b ); double minus( int a, int b ); 创建接口仅仅给出了抽象方法,如果要具体的实现接口所定义的方法,则需要某个类为接口中的每个抽象方法定义具体的操作来实现这个接口的功能。,2、接口的实现,实现接口的形式为:

5、public class 类名 implements 接口名1, 接口名2, 语句体 其中,使用关键字implements来定义这个类的接口,一个类可以实现多个接口,使用逗号将它们分隔开。注意三点: 1)如果实现某个接口的类不是使用关键字abstract修饰的抽象类,则在类中必须定义实现接口所有抽象方法的具体实例方法,并且该方法必须与接口中的方法定义完全一致,也就是说具有完全相同的参数个数和类型,以及方法的返回类型。,2、接口的实现,2)如果实现某个接口的类是使用关键字abstract修饰的抽象类,则它可以不实现该接口所有的方法。但是在这个抽象类的任何一个非抽象子类中,必须具体定义其父类所实现

6、的接口中的所有抽象方法。另外,可以定义一个新的接口,用extend关键字去继承一个已有的接口; 3)接口的抽象方法的访问控制符均为public,所以类在实现这些抽象方法时,必须使用public修饰符。例如: public interface Num int num = 10; public void printNum(); public class TestNum implements Num public void printNum() System.out.println( Num= + Num ); ,2、接口的实现,抽象类的意义与接口基本一样,都是为了更好的控制类的抽象结构。定义抽象类

7、的形式为: abstract class 类名 语句体 1)抽象类中的方法可以是实例方法,也可以抽象方法。但是如果一个类含有抽象方法,则此类必须为抽象类。而其如果一个类是抽象类的子类且其不是抽象类,则该子类必须实现父类的所有抽象方法。 2)抽象方法定义了一个抽象类的功能,但是没有给出该功能的具体实现过程。定义抽象方法的形式为: abstract 方法类型 方法名( 参数 ); 3)抽象方法不能使用修饰符static和final修饰。,3、抽象类和抽象方法,接口与抽象类有相似之处,但也有区别,下表 反映了两者的区别。,3、抽象类和抽象方法,课堂练习1 接口的实现与运用,目的: (1)学习如何定义

8、接口; (2)掌握接口的实现方式; (3)使用实现了接口的类; (4)理解接口与抽象类的区别。,任务: 设计和实现一个 Soundable 接口,该接口具有发声功能,同时还能够调节声音大小。Soundable接口的这些功能将会由3种声音设备来具体实现,它们分别是收音机Radio、随身听Walkman 和手机Mobilephone。最后还要设计一个应用程序类来使用这些实现了Soundable 接口的声音设备类。程序运行时,先询问用户想听哪种设备,然后程序就会按照该设备的工作方式来发出声音。程序运行的效果如图所示。,思考: (1)请问在InterfaceTest 类中,SoundDevice数组是

9、什么类型的,该数组为什么能存放3种不同的对象Radio、Walkman 和Mobilephone 呢? (2)在程序中,Soundable 是一个接口,那么该接口是否可以被实例化呢?请在InterfaceTest 类的main()方法中加入以下语句试验一下,并分析结果。,案例7 接口的实现与运用,(3)现在假定要为程序增加一个闹钟类Clock,该类也实现Soundable 接口,能够发出滴答声,请将以下的Clock 类加入到InterfaceTest.java 程序中,并在InterfaceTest 类的main()方法中加入SoundDevice3 = new Clock();语句。,修改之

10、后,重新编译 InterfaceTest.java 并运行它,观察结果。,案例7 接口的实现与运用,(4)在第(3)小题中由于新加入的Clock 类仅仅实现了Soundable 接口的stopSound()和playSound()方法,而increaseVolume()和decreaseVolume()方法没有实现,因此它实质上是一个抽象类,而抽象类是不能实例化的,所以导致编译错误。但是按照常理,闹钟的滴答声确实是不可以增大或减小的,那么如何解决这个问题呢?现在请在Clock 类中加入下面两个含空方法体的方法实现,再编译运行程序,看看会有什么变化。,案例7 接口的实现与运用,(5)现在请模仿本

11、实验的程序设计出一个自己的接口程序,要求先设计一个moveable可移动接口,然后分别设计3个类,即汽车Car、轮船Ship、飞机Aircraft 来实现该接口,最后设计一个应用程序来使用它们。,4、接口回调,接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法。 实例运行,当用XiyoujiRenwu类声明一个变量,即对象zhubajie时,如例子1中的对象zhubajie: XiyoujiRenwu zhubajie; 内存模型如左图所

12、示,声明对象时的内存模型,当系统见到: zhubajie=new XiyoujiRenwu(); 时,就会做两件事: 为height,weight,head,ear,mouth,hand,foot各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间,然后执行构造方法中的语句。 new运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将返回一个引用给对象变量zhubajie。,对象分配内存后的内存模型,5、接口作参数,一个方法的参数是接口类型,就可以将任何实现该接口的类的实例的引用传递给该接口参数,接口参数就可以回调类实现的接

13、口方法。 实例运行,使用接口要点 如果一个类使用了某个接口,那么这个类必须实该接口的所有方法,即为这些方法提供方法体。 在类中实现接口的方法时,方法的名字、返回类参数个数及类型必须与接口中的完全一致。 接口中的方法被默认是public的,所以类在实现口方法时,一定要用public来修饰。 如果接口方法名有返回类型,那么在类中实现该口方法时,方法体至少要有一个return语句; 如果接口方法名是void型,类体除了两个大括号可以没有任何语句。,接口小结,总的来说,接口用途如下: Java语言通过接口使得处于不同层次、互不相关的类可以具有相同的行为。 而且接口可以弥补由于类的单一继承所产生的功能不

14、足。这样就可以既保留类的单一继承所带来的程序简洁和层次清晰等方面的好处,还可以再拥有多个接口提供的强大功能。 用接口包装常量,可以将各式各样的常量放在接口中,让每个使用这些常量的类对象实现这个接口,从而达到共享这些常量的目的。 用接口实现多态性,将成员方法从类中分离出来组成一个接口,随后由每个类实现这个接口。,包是Java语言中有效地管理类的一个机制。 Java 将程序中的类以包的形式组织起来,这些类在目的、范围、功能或继承性上是相关的。在一个包中,不仅有类,而且还有接口,同时还有子包,因此包具有像文件目录一样的层次结构。 包结构为用户带来了以下好处: (1)使得程序的相关部分可以组成一个单元

15、,便于管理。 (2)包使用户可以减少命名冲突。 (3)包将类和接口封装起来,有效地增强了访问控制的管理。,6、包的概念,1.包语句 通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为: package 包名; 1)如果源程序中省略了package语句,源文件中你定义命名 的类被隐含地认为是无名包的一部分,即源文件中定义命 名的类在同一个包中,但该包没有名字。 包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成 。 2)实例运行,7、定义和使用包,. import 语句 使用impor

16、t 语句可以引入包中的类。 在编写源文件时,除了自己编写类外,我们经常需要使用Java提供的许多类,这些类可能在不同的包中。 在学习Java语言时,使用已经存在的类,避免一切从头做起,这是面向对象编程的一个重要方面。 实例运行,课堂练习2:包的使用与访问控制,目的: (1)理解Java 包的组织结构; (2)学会编写带有包结构的程序; (3)掌握包结构下的成员访问控制。,任务: 编写3个类,类名分别为Clock、A、B,其中类Clock 和类A 放在同一个包packone 中,而类B则放在另一个包packtwo 中,包packone和包packtwo放在同一个目录下。类Clock中有3个整型数

17、据hour、minute、second,它们分别是public、private、protected,类Clock还包含一些方法使用这些数据。类A和类B的功能相似,都是使用类Clock并调用类Clock中的方法。请按照下面的实验步骤,循序渐进的完成实验,并回答后面的问题。,(1)首先在d:programming 目录下创建一个文件夹,命名为packone,然后在该文件夹下创建一个名叫Clock.java 的程序,打开文本编辑器按程序清单输入该程序。 (2)接着在packone 文件夹下创建第二个程序命名为A.java,打开文本编辑器按程序清单输入该程序。 (3)现在在d:programming

18、目录下创建第二个文件夹,命名为packtwo,然后在该文件夹下创建一个名为B.java 的程序,打开文本编辑器按程序清单输入该程序。,至此已经编辑好了 3 个源程序,接下来打开DOS 命令行窗口,进行编译,在窗口中输入: d:programmingjavac packoneclock.java d:programmingjavac packoneA.java d:programmingjavac packtwoB.java 编译的结果将分别在packone 文件夹和packtwo 文件夹中生成Clock.class,A.class 和B.class文件。接着在命令行中输入: d:program

19、ming java packone.A d:programming java packtwo.B 分别运行这两个程序,观察程序输出结果。,思考: (1)现在请将Clock 类的构造函数public Clock(int i, int j, int k)改成Clock(int i, int j, int k)然后分别运行A.class 和B.class,观察所得结果。 (2)由于在B.java 程序中使用了import packone.*;语句从而导入了packone 包中的Clock 类,但是import packone.*;这种写法仅仅导入指定包中的public 类,如果现在将Clock 类的声明public class Clock 改成class Clock,测试一下程序运行会报错吗? 。,(3)用import 语句可以导入所需的类,如果不想使用import 语句,那么在使用包中的类时就必须带上完整的包路径。现在请把B.java 程序做如下的修改: /B.java package packtwo; class B public static void main(String args) packone.Clock c = new packone.Clock(8, 30, 5); System.out.println(从类B中访问Clock hour= +

温馨提示

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

评论

0/150

提交评论