《Java面向对象程序设计案例教程》课件-第5章 Java面向对象的特征_第1页
《Java面向对象程序设计案例教程》课件-第5章 Java面向对象的特征_第2页
《Java面向对象程序设计案例教程》课件-第5章 Java面向对象的特征_第3页
《Java面向对象程序设计案例教程》课件-第5章 Java面向对象的特征_第4页
《Java面向对象程序设计案例教程》课件-第5章 Java面向对象的特征_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

第5章Java面向对象的特征理解封装性;掌握继承的实现方法以及类成员的访问和继承原则理解抽象类和最终类的特点及使用场合掌握多态技术的具体形式与应用理解接口的含义与作用,会使用接口进行简单的程序设计了解Java的常用类库包07二月2025教学目标在面向对象程序设计方法中,封装是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装是一种信息隐藏技术,在java中通过关键字private实现封装。详见教材例题5-107二月20255.1封装继承性反应了类之间的一种关系。一个类可以继承其他类的所有成员,包括成员变量和成员方法,该类还可以拥有自己的成员。被继承的类称之为父类,继承后生成的新类称之为子类。父类和子类之间是集成管理,又称为派生关系。Java语言仅支持单继承,即每个子类只允许一个父类,而不允许有多个父类。但是可以从一个父类中生成若干个子类。继承不改变成员变量的访问权限,父类中的公有成员、私有成员和保护成员,在子类中仍然是公有成员、私有成员和保护成员。07二月20255.2继承在讲解继承的基本概念之前,读者可以先想一想这样一个问题:现在假设有一个Person类,里面有name与age两个属性,而另外一个Student类,需要有name、age、school三个属性,如图5-1所示,从这里可以发现Person中已经存在有name和age两个属性,所以不希望在Student类中再重新声明这两个属性,这个时候就需要考虑是不是可以将Person类中的内容继续保留到Student类中,也就是引出了接下来所要介绍的类的继承概念。07二月20255.2.1继承的实现07二月2025图5-1Student类与Person类在这里希望Student类能够将Person类的内容继承下来后继续使用,可用图5-2表示:图5-2Student类与Person类继承关系Java类的继承格式如下:class子类名extends父类名{子类体}详见教材例题5-207二月2025详见教材例题5-3,5-4,5-507二月20255.2.2子类对象的实例化过程从TestPersonStudentDemo1中读者应该可以发现,super关键字出现在子类中,而且是去调用了父类中的构造方法,所以可以得出结论:super主要的功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法。详见教材例题5-6super关键字不仅可以调用父类中的构造方法,也可以调用父类中的属性或方法,格式如下:super.父类中的属性;super.父类中的方法();详见教材例题5-7,5-8,5-907二月20255.2.3super关键字5.3.1抽象类与抽象方法类是对现实世界中实体的抽象,但我们不能以相同的方法为现实世界中所有的实体做模型,因为现实世界中大多数的类太抽象而不能独立存在。例如:我们不能给出一个通用的计算二维图形面积的方法。定义抽象类的一般格式如下:[访问限定符]abstractclass类名{//属性说明…//抽象方法声明…//非抽象方法定义…}07二月20255.3抽象类和最终类类中允许定义抽象方法。所谓抽象方法,是指在类中仅仅声明了类的行为,并没有真正实现行为的代码,即只有方法头、没有方法体的方法。声明抽象方法的一般格式如下:[访问限定符]abstract数据类型方法名([参数列表]);例如:abstractvoiddraw();//声明类中的draw()方法为抽象方发法

07二月2025有关抽象类和抽象方法的说明如下:抽象类只能被继承而不能创建具体对象,即不能被实例化。2.抽象方法仅仅是为所有的派生子类定义一个统一的接口,方法具体实现的程序代码由各个派生子类来完成,不同的子类可以根据自身的情况以不同的程序代码实现。3.抽象方法只能存在于抽象类中,一个类中只要有一个方法是抽象的,则这个类就是抽象的。构造方法、静态(static)方法、最终(final)方法和私有(private)方法都不能被声明为抽象方法。详见教材例题5-1007二月20255.3.2最终类最终类是指不能被继承的类。即最终类没有子类。在Java语言中,如果不希望某个类被继承,可以声明这个类为最终类。最终类用关键字final来说明。例如:publicfinalclassC就定义类C为最终类。如果没有必要创建最终类,而又想保护类中的一些方法不被覆盖,可以用关键字final来指明那些不能被子类覆盖的方法,这些方法称为最终方法。例如:publicclassA{Publicfinalvoidf()}上例在类A中定义了一个最终方法f(),任何类A的子类都不能覆盖方法f()。07二月2025多态是面向对象的重要特性,简单点说是“一个接口,多种实现”,就是指同一种事物表现出多种形态。编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来,再通过这个抽象的事物,与不同的具体事物进行对话。多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法。多态提供了“接口与实现的分离”,将“是什么”与“怎么做”分离出来。多态主要分为方法的覆盖和方法的重载。

07二月20255.4多态5.4.1方法的覆盖覆盖是发生在子类继承父类过程中,对原有变量或方法进行的覆盖操作,是Java多态特性的一个重要体现,表现在不用类之间子类对父类方法的覆盖,改变父类方法原有的行为和意义。方法覆盖:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。详见教材例题5-1107二月20255.4.2方法的重载在Java中,同一个类中的两个或两个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法被称为重载(Overloaded),这个过程被称为方法重载(MethodOverloaded)。方法重载是Java实现多态的一种方式。当一个重载方法被调用时,Java用参数的类型和(或)数量来表名实际调用的重载方法的版本。因此,每个重载方法的参数的类型和(或)数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。当Java调用一个重载方法时,参数与调用参数匹配的方法被执行。07二月202507二月2025项目方法重载方法覆盖(重写)类的层次针对同一个类中的同名方法针对父类与子类中的同名方法方法名称各重载方法的名称必须完全相同被继承与继承的方法名称必须完全相同返回值类型各重载方法的返回值的类型必须完全相同被继承与继承的方法的返回值的类型必须完全相同参数类型各重载方法的参数类型可以不同被继承与继承方法的参数类型必须完全相同参数数目各重载方法的参数数目可以不同被继承与继承方法的参数数目必须完全相同表5-1成员方法的重载与覆盖的区别详见教材例题5-125.5.1接口的概念在Java中接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。接口体现的是事物扩展的功能,在Java中,类定义了一个实体,包括实体的属性,实体的行为。而接口定义了一个实体可能发生的动作,只有一个声明,没有具体的行为。当一个方法在很多类中有不同的体现是时候这个时候就可以将这个方法抽象出来做成一个接口。接口里面只能有不可修改的全局常量,只能有抽象的方法,接口没有构造方法。07二月20255.5接口5.5.2接口的定义接口的定义格式如下:[public]interface接口名[extends父接口列表]//接口声明{//接口体开始//常量数据成员的声明及定义

数据类型

常量名=常数值;…//声明抽象方法

返回值类型

方法名([参数列表])[throw异常列表];…}//接口体结束07二月2025说明如下:定义接口时使用interface定义,区别于抽象类,不需要加class。接口不能被实例化,不能直接创建对象,因为接口里面只有抽象的方法,没有具体的功能。接口可以继承接口,接口要实现具体的功能必须有实现他的子类,实现接口的子类中必须重写接口全部的抽象方法。接口和接口之间可以多继承。接口的子类可以是抽象类,但是没有实际的意义。一个子类可以实现多个接口,通过implements关键字去实现。接口需要通过多态才能创建对象。07二月20255.5.3接口的实现接口的实现,即在实现接口的类中重写接口中给出的所有方法,书写方法体代码,完成方法所规定的功能。实现接口类的一般格式如下:[访问限定符][修饰符]class类名[extends父类名]implements接口名列表{//类体开始标志[类的成员变量说明]//属性说明[类的构造方法定义][类的成员方法定义]/*重写接口方法*/接口方法定义//实现接口方法}下面举例说明接口的实现。教材例题5-1307二月20255.6.1包的概念Java中的包package,就是电脑中的文件夹。我们平时在工作中,文件太多时,都会新建文件夹进行分类管理,java中的包也是类似的道理,当我们的类太多时,也需要进行分类管理,这时我们就会把类文件放到包中,就是把这个.class文件放到了一个文件夹中,这样也能有效地避免了命名冲突。07二月20255.6package关键字和包5.6.2包的创建通过关键字package来声明包。格式如下:packagepackageName;其中,packageName是声明的包名。Package语句作为Java源文件的第1条非空格、非注释语句,指明该源文件定义的类所在的包。如果在源文件中省略了Package语句,则源文件中用户定义命名的类被隐含地认为是无名包的一部分,即源文件中用户定义命名的类在同一个包中,但该包没有名字。07二月20255.6.3包的引用创建一个包之后,就要对它进行引用。一般来说,可以使用import

温馨提示

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

评论

0/150

提交评论