Java程序设计基础 课件 第6章 Java继承与抽象类_第1页
Java程序设计基础 课件 第6章 Java继承与抽象类_第2页
Java程序设计基础 课件 第6章 Java继承与抽象类_第3页
Java程序设计基础 课件 第6章 Java继承与抽象类_第4页
Java程序设计基础 课件 第6章 Java继承与抽象类_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第六章Java继承与抽象类6.1继承的概念6.2继承的基本语法6.3UML图6.4final修饰符6.5Object类6.6抽象类本章小结

6.1继 承 的 概 念

继承是所有OOP语言不可缺少的组成部分,是面向对象的三大特征之一,也是实现代码重用的重要手段。利用继承机制,可以先创建一个具有共有属性的一般类,然后根据该一般类再创建具有特殊属性的新类。新类继承一般类的状态(成员变量)和行为(成员方法),并根据新类的情况增加或改变具有新类特征的新的状态和行为。由继承得到的新类称为子类,被继承的一般类称为父类(超类)。

Java的继承具有单根、单继承的特点,每个子类有且仅有一个直接父类,并且所有的类都来自于一个“根”——Object类。例如,定义了动物类Animal,动物类下面有各种子类,Dog、Fish、Bird等等,而这些子类下面可能还有更为具体的类,如Dog下面还有斗牛犬(Bulldog)、萨摩耶犬(Samoyed)、贵宾犬(Poodle)、哈士奇(Husky)等等各种类型的狗,对于Java语言,就会形成如图6-1所示的继承层次。图6-1继承层次结构

从上面的继承可以看出,定义了Animal类,下面有若干子类,而Animal本身也是Object类的子类;每一个类(除了Object)有且仅有一个父类,也即每个儿子都只能有一个亲生父类。Java没有多重继承的概念(一个儿子有多个亲生父亲)。

6.2继承的基本语法

在类的声明中,通过使用关键字extends来声明一个类的子类。但是,为什么继承不用单词inherit,而用extends呢?extends是扩展的意思,Java的继承是子类得到了父类的成员,但更重要的是根据子类的特征扩展出新的成员或者根据修改继承得到成员方法。

程序结果:

6.3UML图

统一建模语言(UnifiedModelLanguage,UML)又称标准建模语言,是用来对软件密集系统进行可视化建模的一种语言。对于Java的类以及类的继承,可以使用UML图来表示,它能让我们在编写具体程序代码之前对软件系统有一个全面的认识,便于对软件系统进行建模与设计。上述Dog类继承Animal类的UML图如图6-2所示。

图6-2继承关系UML图

图中,

(1)类的UML图使用三格方格表示,分别是类名、成员变量和成员方法。

(2)类的继承关系使用空心箭头来指向,由子类指向父类。

6.4final修饰符

6.4.1最终类final修饰类,即在定义类的时候加上final修饰符,例如在Animal类定义时加上final:publicfinalclassAnimal{...}则在编译Animal子类的时候就会发现编译错误:

6.4.2最终方法

final如果修饰一个类的成员方法,则该成员方法就变成最终方法,不可以被子类所重写/覆盖(override),例如在Animal类的showInfo方法前面加上final:

publicfinalvoidshowInfo(){

System.out.println("名称:"+name);

System.out.println("重量:"+weight);

Dog类不变,编译Dog类的时候就会有下列错误:

对一些特定的方法用final修饰,可以避免被子类重写。

6.4.3最终变量

final如果修饰一个类的成员变量,该成员变量就类似于符号常量。符号常量在运行期间不允许再发生变化,所以常量在声明时要求必须指定该常量的值,并且之后不能被改变。一个成员变量若被static和final两个修饰符所限定,它实际的含义就是全局常量。

例如:在Student3类中定义的“finalstaticStringschool="第一实验小学";”,数学上常见的π的定义“staticfinaldoublePI=3.14159;”。在声明PI的时候就必须对PI进行赋值,之后不允许对PI进行赋值改变,PI就相当于一个符号常量,值为3.14159。

6.5Object类

在本章的开头介绍过,Java的继承是单根单继承,其中的java.lang.Object类是所有类的根,所有的类都是直接或间接地继承该类而得到的;如果某个类没有使用extends关键字继承某个类,则该类就为java.lang.Object类的子类。既然Object类是所有类的最终父类,那么Object类中的成员将被所有类所继承,该类主要的成员方法如表6-1所示。

6.5.1equals()方法

equals()方法用以判断两个对象是否相等。

自定义的类获得Object类的这个方法,可以在自定义类中重写这个方法,按照自定义的规则判断两个对象什么情况下相等,什么情况下不相等。比如要比较两只狗类的对象是否相等,我们自定义的规则是:如果两只狗的名字相同,就认为两只狗相等,在Dog类中加入对equals函数的重写。

程序结果:

6.5.2toString()方法

toString()方法用以返回对象的字符串表示形式。

例如,定义一个Dog对象:

Dogdog1=newDog("丁丁",15.5,"Lightbrown");

该语句意为:定义一个Dog类对象dog1,这只狗的名字叫丁丁,重量15.5斤,棕黄色毛。我们说dog1是Dog的对象,但dog1实际上是一个Dog类型的引用变量,如果直接输出dog1,输出的是该变量保存的在堆内存中的Dog对象的地址,如运行“System.out.println(dog1);”程序语句,则会出现下图结果:

程序结果:

6.5.3getClass()方法

getClass()方法用以获取对象的类型。

任何一个对象都可以调用getClass()方法获得该对象类型,可以把该方法的返回值赋值给Java的类类型(Class)对象,该对象能够获取该类型的相关信息。

程序结果:

6.5.4hashCode()方法

hashCode()方法用以返回对象的哈希码值。

Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址、对象的字段等)映射成一个数值,这个数值称作散列值。hashCode方法的主要作用是配合基于散列的集合(Set)一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。

6.6抽象类

在Java中用关键字abstract修饰的类称为抽象类。上面动物类Animal的继承结构如图6-3所示。图6-3类的抽象

图中,最上面的父类Animal是比较抽象的概念,如果用Animal生成一个对象,只能说这里有一只动物,但具体是什么动物呢?这样生成的对象往往也是抽象的。Animal中有一个move方法,由于不知道是什么Animal,只能说这只动物在moving,这样的方法也没有多少实际意义。对于这种情况,可以将Animal声明为抽象类,而这个move方法就声明为抽象方法。

程序分析:

(1) Animal2类使用abstract关键字进行修饰,表示该类是一个抽象类,抽象类是不能使用new来生成对象的,阻止了抽象类的实例化。

(2)“publicabstractvoidmove();”在Animal2中有一个抽象的成员方法,抽象方法只有方法声明,没有方法体,并且使用abstract修饰。如果一个类有一个及以上的抽象方法,该类就必须声明为抽象类。

(3)如果有子类继承了Animal2类,子类可以实现抽象方法即重写该抽象方法,具体为去掉abstract修饰符,完成方法体,方法体“{}”如果为空,称为空实现。如果有一个及以上的抽象方法没有被实现,则该子类还是抽象类,必须使用abstract来修饰才能满足语法要求。

(4)如Dog子类实现Animal2:

本章小结

1.Java的继承中子类获得父类的非私有成员,从而实现了代码复用。继承使用extends关键字,表示子类获得父类的成员并根据子类的特征进行扩展。2.重载(overload)即在一个类中有多个同名的方法,但是参数列表不同。3.重写(override)即子类获得父类的成员方法,根据子类的特征

温馨提示

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

评论

0/150

提交评论