第5章继承ppt课件

上传人:无*** 文档编号:188246485 上传时间:2023-02-18 格式:PPT 页数:51 大小:174KB
收藏 版权申诉 举报 下载
第5章继承ppt课件_第1页
第1页 / 共51页
第5章继承ppt课件_第2页
第2页 / 共51页
第5章继承ppt课件_第3页
第3页 / 共51页
资源描述:

《第5章继承ppt课件》由会员分享,可在线阅读,更多相关《第5章继承ppt课件(51页珍藏版)》请在装配图网上搜索。

1、v学习导读学习导读v本章讨论面向对象的编程本章讨论面向对象的编程OOPOOP及其关键及其关键技术:承继和多态、接口、包。技术:承继和多态、接口、包。v承继性是软件复用的一种方式,对降低软承继性是软件复用的一种方式,对降低软件复杂性行之有效。承继性同时是面向对件复杂性行之有效。承继性同时是面向对象程序设计言语的特点,采用对象但没有象程序设计言语的特点,采用对象但没有承继性的言语是基于对象的言语,但不是承继性的言语是基于对象的言语,但不是面向对象的言语,这是两者的区别。面向对象的言语,这是两者的区别。v多态性允许以一致的风格处置已存在的变多态性允许以一致的风格处置已存在的变量及相关的类,使添加系统

2、中新功能变得量及相关的类,使添加系统中新功能变得容易。容易。第5章 承继v教学重点与难点教学重点与难点 v了解承继和复用的概念了解承继和复用的概念v了解父类和子类了解父类和子类v掌握扩展类编程掌握扩展类编程v了解多态性是如何扩展和维护系统性能了解多态性是如何扩展和维护系统性能v掌握如何建立包和接口掌握如何建立包和接口第5章 承继第5章 承继v5.1 承继的概念承继的概念v5.2 扩展类扩展类v5.3 多态与动态绑定多态与动态绑定v5.4 构造函数的承继与重载构造函数的承继与重载v5.5 包包v5.6 接口接口v5.7 本章小结本章小结v5.8 思索与练习思索与练习5.1 承继的概念承继性是面向

3、对象程序设计言语的最主要的特点,是其承继性是面向对象程序设计言语的最主要的特点,是其他言语如面向过程言语所没有的。他言语如面向过程言语所没有的。类之间的承继关系是现实世界中遗传关系的直接模拟,类之间的承继关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联络以及对属性和操作的共享,它表示类之间的内在联络以及对属性和操作的共享,即子类可以沿用父类被承继类的某些特征。当然,即子类可以沿用父类被承继类的某些特征。当然,子类也可以具有本人独立的属性和操作。子类也可以具有本人独立的属性和操作。承继例如,飞行器、汽车和例如,飞行器、汽车和轮船可归于交通工具类,轮船可归于交通工具类,飞行器类可以承继交通

4、飞行器类可以承继交通工具类某些属性和操作。工具类某些属性和操作。除遗传关系外,现实世界中除遗传关系外,现实世界中还普遍存在着部分还普遍存在着部分整体关整体关系。例如,飞机可由发动机、系。例如,飞机可由发动机、机身、机械控制系统、电子机身、机械控制系统、电子控制系统等构成。聚集关系。控制系统等构成。聚集关系。5.1.1 5.1.1 承继定义承继定义 承继性是软件复用的一种方式。新类由已存在的类生成,经过保管它们的属性和行为,并且根据新类的要求对性能加以修正,添加新的属性和行为。假设子类只从一个父类承继,那么称为单承继;假设子类从一个以上父类承继,那么称为多承继。留意 Java不支持多重承继,但它

5、支持“接口概念。接口使Java获得了多重承继的许多优点,摒弃了相应的缺陷。父类名跟在父类名跟在extends 关键字后面,用来阐明当关键字后面,用来阐明当前类是哪个曾经存在类的前类是哪个曾经存在类的子类,存在承继关系。子类,存在承继关系。定义定义 雇员类雇员类 Employee 的两个子类:的两个子类:普通雇员类普通雇员类:CommonEmployee 主主 管管 类类:ManagerEmployee子类从父类承继有子类从父类承继有两个主要的方面:两个主要的方面:1属性的承继。属性的承继。例如,公司是一个例如,公司是一个父类,一个公司有父类,一个公司有称号、地址、经理、称号、地址、经理、雇员等

6、,这些都属雇员等,这些都属于构造方面。于构造方面。2方法的承继。方法的承继。一个父类定义了假一个父类定义了假设干操作,如一个设干操作,如一个公司要有工程、利公司要有工程、利润、任命经理、录润、任命经理、录用职工等操作,子用职工等操作,子公司也将承继这些公司也将承继这些行为。行为。5.2.1 5.2.1 承继关系定义承继关系定义 5.2 扩展类class CommonEmployee extends Employee 子类子类1:int m_ManagerNo;定义类属性定义类属性m _ManagerNo,代,代表雇员上司的编号表雇员上司的编号class ManagerEmployee exte

7、nds Employee 子类子类2:int m_SecretaryNo;定义类属性定义类属性m_SecretaryNo,代表秘书的编号代表秘书的编号两个子类两个子类声明类头声明类头-父类名父类名5.2.2 5.2.2 属性承继与隐藏属性承继与隐藏 虽然Employee类是一个父类,但是并不由于它是父类就意味着它有更多的功能。恰恰相反,子类比它们的父类具有更多的功能。由于子类是父类的扩展,添加了父类没有的属性和方法。1子类不能访问父类的private成员,但子类可以访问其父类的public,2protected访问是public和private访问之间一个维护性的中间层次。3由于被承继的父类成

8、员没有在子类声明中列出,但是这些成员确实存在于子类中。5.2.2 5.2.2 属性承继与隐藏属性承继与隐藏 Manger类增添了一个新的字段用于存储奖金,并且增添了一个新方法用于设置它的值:class Manager extends Employeepublic void setBonusdouble b bonus=b;private double bonus;5.2.3 方法承继、覆盖与重载方法承继、覆盖与重载 对于Manager对象,可以运用getName和getHireDay等方法。即使这些方法没有明显地在Manager类中定义,它们也自动地从Employee类中承继过来了。2方法覆盖

9、方法的覆盖是指:子类定义同名方法来覆盖父类的方法,是多态技术的一个实现。当父类方法在子类中被覆盖时,通常是子类版本调用父类版本,并做一些附加的任务。1 1方法承继方法承继关于覆盖应留意的事项:关于覆盖应留意的事项:1不运用不运用super而希望援用父类方法会导致无限的递而希望援用父类方法会导致无限的递归,由于子类方法实践上是在调用它本人。归,由于子类方法实践上是在调用它本人。2当经过父类援用调用一个方法时,当经过父类援用调用一个方法时,Java会正确地会正确地选择与那个对象对应的类的覆盖方法。选择与那个对象对应的类的覆盖方法。3方法覆盖中,子类在重新定义父类已有的方法时方法覆盖中,子类在重新定

10、义父类已有的方法时,应坚持与父类完全一样的方法头声明,即与父类完全,应坚持与父类完全一样的方法头声明,即与父类完全一样的方法名、前往值和参数列表。一样的方法名、前往值和参数列表。4子类可以添加字段,也可以添加方法或者覆盖父子类可以添加字段,也可以添加方法或者覆盖父类中的方法。然而,承继不能去除父类中的任何字段和类中的方法。然而,承继不能去除父类中的任何字段和方法。方法。3 3方法重载方法重载 重载的定义:可以用一样的方法名但不同的参数表来定义方法参数表中参数的数量、类型或次序有差别,这称为方法重载。重载overloading:当多个方法具有一样的名字而含有不同的参数时,便发生重载。编译器必需挑

11、选处调用哪个方法。它经过将在不同方法头部中的参数类型和在特定的方法调用中运用值的类型进展比较,从而挑选出正确的方法。5.2.4 5.2.4 在子类中运用构造函数在子类中运用构造函数关于子类构造函数的规律总结如下:1子类构造函数总是先调用显式的或隐式地其父类的构造函数,以创建和初始化子类的父类成员。2构造函数不能承继,它们只属于定义它们的类。假设把一个对象指定为其父类的援用,那么允许把这个对象转换回它本人原来的类型,为了向该对象传送一些在父类中没有的信息,必需这样做。3当创建一个子类对象时,子类构造函数首先调用父类的构造函数并执行,接着才执行子类构造函数。5.2.5 5.2.5 父类对象与子类对

12、象的关系父类对象与子类对象的关系调用过程:e.getSalary程序会选择正确的getSalary方法。留意虽然e的声明类型是Employee.当e指向一个Employee对象时,e.getSalary()会调用Employee类中的getSalary方法;而当e指向一个Manager对象时,getSalary()方法就变成了Manager类的getSalary()方法。虚拟机知道e所指对象的实践类型,因此它会调用正确的方法。现实上,一个对象变量如e可以指向多种实践类型这种景象称为“多态。在运转时自动选择正确的方法进展调用称作动态绑定。5.2.6 5.2.6 扩展类承继的运用示范扩展类承继的运

13、用示范如今讨论一个承继性的详细例子5-2,点、圆的层次构造。首先建立并运用Point类,然后从point类承继产生Circle类。程序的模块:1模块1:程序定义了一个Point类;2模块2:又定义了Circle类,它是从Point类承继来的;3运用程序,该程序演示了如何把子类援用指定为父类援用,以及把父类援用强迫转换为子类援用,留意当p添加到string时对toString的隐式调用。用来完成这个效果的两项关键编程技术是:1创建Circle类承继了Point类。2在Point类和Circle类中用完全一样的signature覆盖toString方法。值得强调的是以下几点:1Java将隐式地把O

14、bject类java.lang包作为新定义类的父类。Object类提供了一套任何类的任何对象均可运用的方法。2子类构造函数总是先调用显式的或隐式地其父类的构造函数,以创建和初始化子类的父类成员;构造函数不能承继,它们只属于定义它们的类。3父类的实例变量可用Protected限定,因此,从Point衍生Circle类时,Circle类的方法能直接援用坐标x和y,而不用运用访问。5.3 多态与动态绑定多态与动态绑定多态Polymorphism提高了程序可扩展性,调用多态性行为的软件传送给对象的音讯即方法调用与对象的类型无关,因此能呼应已有音讯的新类型可以直接参与系统,而不用修正根本系统。在运转时自

15、动选择正确的方法进展调用称作动态绑定dynamic binding。5.3.1 5.3.1 多态多态 对于数据来说,承继能否为正确的设计可以用一个简单的规那么来判别。“is-a规那么阐明子类的每一个对象都是一个超类的对象。例如,每一个经理是一个员工。然而,只需经理类是员工类的子类才是有意义的。很明显,反过来就不行了并不是每个员工都是经理。还有一个明确表达“is-a规那么的方法是替代原那么。该原那么规定无论何时,假设程序需求一个超类对象,都可以用一个子类对象来替代。5.3.2 5.3.2 动 态 绑动 态 绑定定了解调用一个对象方法的机制是非常重要的。下面详细引见:1编译器检查对象的声明类型和方

16、法名。2接着,编译器检查方法调用中的参数类型。假设在一切的叫做f的方法中有一个其参数类型同调用提供的参数类型最匹配,那么该方法就会被选择调用。这个过程称作超载选择。3当程序运转并且运用动态绑定来调用一个方法时,那么虚拟机必需调用同x所指向的对象的实践类型相匹配的方法版本。动态绑定是非常重要的特性:它能使程序变得可扩展而无需重编译已存代码。5.3.35.3.3父类对象与子类对象的运用与转化父类对象与子类对象的运用与转化 this表示的是当前对象本身,更准确地说,this代表了当前对象的一个援用。对象的援用可以了解为对象的另一个名字,经过援用可以顺利地访问对象,包括修正对象的属性、调用对象的方法。

17、1 1thisthis 现引见程序里父类对象与子类对象间的指代运用和转化。this和super是常用来指代父类对象与子类对象的关键字.super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的援用。所谓直接父类是相对于当前对象的其他“祖先而言的。2 2supersuper提供一个构造函数:public ManagerString n,double s,int year,int month,int daysuper(n,s,year,month,day);bonus=0;这里关键字super具有不同的意义。代码:super(n,s,year,month,day);的意思是“调用Empl

18、oyee父类的构造函数,同时带有n、s、year、month以及day参数。5.3.35.3.3父类对象与子类对象的运用与转化父类对象与子类对象的运用与转化父类对象与和子类对象的转化需求留意如下的原那么:1子类对象可以被视为是其父类的一个对象;2父类对象不能当成是其某一个子类的对象;3假设一个方法的方式参数定义的是父类对象,那么调用这个方法时,可以运用子类对象作为方式参数;4假设父类对象援用指向的实践是一个子类对象,那么这个父类对象的援用可以用强迫类型转换转化成子类对象的援用。5.3.4 5.3.4 多态性在工资系统中的运用多态性在工资系统中的运用下面给出了一个根据员工类型利用笼统方法和多态性

19、完成工资单计算的程序。Employee是笼统abstract父类,Employee的子类有经理Boss,每星期发给他固定工资,而不计任务时间;普通雇员CommissionWorker,除根本工资外还根据销售额发放浮开工资;对计件工人PieceWorker,按其消费的产品数发放工资;对计时工人HourlyWorker,根据任务时间长短发放工资。该例的Employee的每个子类都声明为final,由于不需求再由它们生成子类。对程序的几点阐明:1对一切员工类型都运用earnings方法,但是每个人挣的工资按他所属的员工类计算,一切员工的类都是从父类Employee承继出的。2假设一个子类是从一个具有

20、abstract方法的父类承继的,子类也是一个abstract类并且必需被显式声明为abstract类。3一个abstract类可以有实例数据和非abstract方法,而且它们遵照普通的子类承继规那么。4如今分析一下Employee类,其中public方法包括:构造函数,以及一个abstract方法earnings。为什么earnings方法应是abstract呢?由于在Employee类中为这个方法提供实现是没有意义的,谁也不能为一个笼统的员工发工资,而必需先知道是哪种员工。5Boss类是从Employee中承继出来的,其中public方法包括一个以名、姓和每周工资作为参数的构造函数6Com

21、missionWorker类从Employee中承继出来。7PieceWorker类,也是从Employee承继。8HourlyWorker类亦从Employee承继。9Test运用程序的main方法首先声明了ref为Employee援用。5.4 构造函数的承继与重载构造函数的承继与重载5.4.1 5.4.1 默许字段初始化默许字段初始化构造函数的作用是来定义对象的初始形状。然而由于对象的构造如此重要,Java还另外提供了一些不同的机制来编写构造函数。假设在构造函数中没有明确地给某个字段赋值,那么此字段会被自动地赋值以一个默许值:假设是数字那么被赋值以0,假设是布尔类型那么被赋值以false,

22、假设是对象援用那么被赋值以null。但运用默许值被以为是一种糟糕的编程做法。由于,假设字段以不可见的方式被初始化会使得他人很难读懂程序。5.4.2 5.4.2 默许构造函数默许构造函数默许构造函数是指没有参数的构造函数这种构造函数有时也称作无参数构造函数。例如,下面是个Employee类的默许构造函数:public Employee()name=;salary=0;hireDay=new Date();默许构造函数是指没有参数的构造函数这种构造函数有时也称作无参数构造函数。例如,下面是个Employee类的默许构造函数:public Employee()name=;salary=0;hireD

23、ay=new Date();假设编写了一个没有构造函数的方法,那么系统会自动为此方法提供一个默许构造函数。此默许构造函数将一切的实例字段初始化为默许值。5.4.3 5.4.3 显式字段初始化显式字段初始化 由于在类中可以重载构造函数方法,所以可以采用多种方式来设置类中实例字段的初始形状不论什么样的构造函数调用,确保每个实例字段都被设置为某个有意义的值是一种很好的习惯。在类的定义中,可以简单地把一个值赋值给任何字段。例如,private String name=lili 在执行构造函数前,此赋值会被执行。当类中一切的构造函数都需求把某一特定的实例字段赋值以一样的值时,此语法非常有用。5.4.4

24、5.4.4 参数名参数名当编写小的构造函数时,普通选择单个字母作为参数名。public Employee(String n,double s)name=n;salary=s;然而,这么做的缺陷是需求阅读代码才干知道参数n和s表示的是什么。一些程序员在每个参数前加一前缀“a:5.4.5 5.4.5 调用另一个构造函数调用另一个构造函数关键字this指向隐式参数。此外,此关键字还有另一种含义。假设构造函数第一个语句具有方式this(),那么此构造函数调用此类中的另一个构造函数。下面是一个典型的实例:public Employee(double s)/calls Employee(String,do

25、uble)this(“Employee#+nextId,s);nextId+;5.4.6 5.4.6 初始化块初始化块在Java中实践上还有第三种机制,它叫做初始化块。在类声明中可以包含恣意数量的代码块。只需构造了此类的一个对象,这些代码块就会被执行。例如:class Employeepublic Employee(String n,double s)name=n;salary=s;5.4.6 5.4.6 初始化块初始化块public Employee()name=;salary=0;/对象初始化模块 id=nextId;nextId+;5.4.6 5.4.6 初始化块初始化块private

26、String name;private double salary;private int id;private static int nextId;在这个例子中,id字段在对象初始化块中被初始化,而不论是哪个构造函数构造了一个对象。初始化块首先被运转,然后构造函数的主体部分被执行。5.5 包包5.5.1 5.5.1 包用途包用途 Java允许把多个类搜集在一同成为一组,称作包package。包便于组织义务,以及使本人的义务和其他人提供的代码库相分别。规范Java库被分类成许多的包,其中包括java.1ang、java.util和java等等。规范Java包是分层次的。就像在硬盘上嵌套有各级子

27、目录一样,可以经过层次嵌套组织包。一切的Java包都在Java和Javax包层次内。5.5.2 5.5.2 创建包创建包曾经看到,已有的库,比如Java API中的类和接口,可以导入到Java程序中。Java API中的每一个类和接口属于一个特定的包。它包含一组相关联的类和接口,实践是对类和接口进展组织的目录构造。例如,假定文件名是MyClass.java。它意味着在那个文件有一个、而且只能有一个public类。而且那个类的名字必需是MyClass包括大小写方式:package mypackage;public class MyClass 5.5.2 5.5.2 创建包创建包创建可复用的类的步

28、骤简要阐明如下:1定义一个public类。假设类不是public,它只能被同一包中的其他类运用。2选择一个包名,并把package语句加到可复用的类的源代码文件中。3编译这个类。这样,它就被放到适当的包目录构造中,以供编译器和解译器运用。4把这个可复用的类导入到需求用它的程序中。如今就可以运用它了。留意 在Java言语中可以出如今类定义的括号外面的仅有两个语句,它们是package和import。5.5.3 5.5.3 包援用包援用-每个类名前加上完好的包名每个类名前加上完好的包名例如,给出一个指向此包中的类的快捷方式。一旦运用import导入了以后,就不再需求给出完好的包名。可以引入一个特定

29、的类,也可以引入整个包。import语句要放在源文件的头部但在一切package语句的下面。例如,可以经过下面的语句引入在java.util包中的一切的类:import java.util.*;然后,就可以运用Date today=new Date();而不需求在前面加上包名。也可以引入包中某个特定的类:import java.util.Date;5.5.3 5.5.3 包援用包援用-向包中添加类向包中添加类要把类放人一个包中,必需把此包的名字放在源文件头部,并且放在对包中的类进展定义的代码之前。例如,在文件Employee.java的开场部分如下:package com.horstmann.

30、corejava;public class Employee把包中的文件放入与此完好的包名相匹配的子目录中。例如,在包com.horstmann.corejava中的一切的类文件都必需放在子目录com/horstmann/core.javaWindows下的comhorstmanncorejava下。这是最简单的一种方法,在本章的后面可以看到更多的选项。5.5.3 5.5.3 包援用包援用-定位类定位类类被存储在文件系统的子目录中。类的途径必需与所在包名相匹配。在前面的例子中,包目录com/horstmann/corejava是程序目录的一个子目录。然而这样安排很不灵敏。普通,有多个程序需求访

31、问包文件。为了使包可以在多个程序间共享,需求做以下事情:1 把 类 放 在 一 个 或 多 个 特 定 的 目 录 中,比 如/home/user/classdir。此目录是包树的根本目录。假设参与了类com.horstmann.corejava.Employee,那么此类文件必需位于子目录/home/user/classdir/com/horstmann/corejava下。2设置类途径。类途径是其子目录包含类文件的一切根本目录的集合。5.5.3 5.5.3 包援用包援用-标志包作用域标志包作用域曾经接触过public和private访问指示符。被标志为Public的部件可以被任何类运用,而

32、私有部件只能被定义它们的类运用。假设没有指定public或private,那么部件即类、方法或变量可以被同一个包中的一切方法访问。5.5.4 Java API5.5.4 Java API包包 为了简化面向对象的编程过程,Java系统事先设计并实现了一些表达了常用功能的规范类,如用于输入输出的类,用于数学运算的类,用于图形用户界面设计的类,用于网络处置的类等。这些系统规范类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,合称为类库。可以援用这些包,也可以创建本人的包。Java的类库是系统提供的已实现的规范类的集合,是Java编程的API,它可以协助开发者方便、快捷地开发Java程序。

33、表5-1 Java API根本包一览 5.6 接口接口5.6.1 5.6.1 接口概念接口概念 接口主要作用是可以协助实现类似于类的多接口主要作用是可以协助实现类似于类的多重承继的功能。在重承继的功能。在JavaJava中,出于简化程序构造的中,出于简化程序构造的思索,不再支持类间的多重承继而只支持单重承思索,不再支持类间的多重承继而只支持单重承继,即一个类至多只能有一个直接父类。然而在继,即一个类至多只能有一个直接父类。然而在处理实践问题的过程中,仅仅依托单重承继在很处理实践问题的过程中,仅仅依托单重承继在很多情况下都不能将问题的复杂性表述完好,需求多情况下都不能将问题的复杂性表述完好,需求

34、其他的机制造为辅助。其他的机制造为辅助。在Java言语中,接口Interface是对符合接口需求的类的一套规范。接口与包类似,也是用来组织运用中的各类并调理它们的相互关系的一种构造,更准确地说,接口是用来实现类间多重承继功能的构造。5.6.2 5.6.2 接口声明接口声明Java中声明接口的语法如下:public interface 接口名 extends 父接口名列表 /接口体;/常量域声明 public static final 域类型 域名=常量值;/笼统方法声明 public abstract native前往值 方法名(参数列表)throw异常列表;从上面的语法规定可以看出,定义接口

35、与定义类非常类似,实践上完全可以把接口了解成为一种特殊的类,接口是由常量和笼统方法组成的特殊类。5.6.2 5.6.2 接口声明接口声明1接口中的属性都是用 final修饰的常量,在这个类中,一切的成员函数都是笼统的,也就是说它们都只需阐明没有定义;2接口中的方法都是用abstract修饰的笼统方法,在接口中只能给出这些笼统方法的方法名、前往值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处置的“接口。5.6.2 5.6.2 接口的实现接口的实现一个类要实现某个或某几个接口时,有如下的步骤和本卷须知:1在类的声明部分,用implements关键字声明该类将要实现哪些接口;2假照

36、实现某接口的类不是abstract的笼统类,那么在类的定义部分必需实现指定接口的一切笼统方法,即为一切笼统方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全一样的前往值和参数列表;3假照实现某接口的类是abstract的笼统类,那么它可以不实现该接口一切的方法。4一个类在实现某接口的笼统方法时,必需运用完全一样的方法头。5接口的笼统方法,其访问限制符都已指定是public,所以类在实现方法时,必需显式地运用public修饰符。5.7 本章小结本章小结面向对象编程的优点之一是可经过承继性实现软件复用。新类经过承继性可承继父类已定义过的实例变量和方法。在这种情况下,新类叫做子类。单

37、一承继是指一个子类承继一个父类。多重承继是指一个子类承继多个父类。Java不支持多重承继,但Java提供了接口。接口具有多承继的许多优点,而却没有它的缺陷。在子类中通常要参与它本人的实例变量和方法,所以子类普通要比它的父类大。另一方面,子类比父类更详细,因此代表了较少的对象。5.7 本章小结本章小结子类不能访问父类的private成员,但子类可以访问其父类的public,protected和包访问成员;要访问父类的包访问成员,子类一定要在父类的包内。子类构造函数总是先调用显式的或隐式地其父类的构造函数,以创建和初始化子类的父类成员。承继性实现了软件的复用,这不但节省了开发时间,也鼓励人们运用曾

38、阅历证无误和调试过的高质量软件。子类的对象可以当作其父类的对象对待,反之那么不行。5.7 本章小结本章小结父类和子类的关系是一种层次构造关系。当一个类运用承继性机制时,它可以是为其他类提供属性和行为的父类,也可以是承继那些属性和行为的子类。承继性层次构造的层次数只受系统硬件构造的限制,但大多数层次构造只需几层。层次构造对于了解和管理复杂软件非常有用。随着软件复杂性的添加,Java提供了经过承继性和多态性支持层次构造的机制。protected访问是public和private访问之间一个维护性的中间层次。父类方法、子类方法和在同一个包内类的方法都能访问父类的protected成员,但其他方法均不

39、能访问。5.7 本章小结本章小结父类可以是一个子类的直接父类或间接父类。直接父类是子类显式运用extends阐明的类,间接父类是子类从层次构造树的前几层上承继的类。当父类某成员不适宜一个子类时,可以在子类中覆盖它。一个子类对象援用可以隐式地转换成一个父类对象援用。运用显式的类型转换,可以把父类援用转换成子类援用。假设目的不是子类对象,将产生Class CastException例外处置。父类代表共性,从一个父类派生的一切类都承继了这个父类的功能。5.7 本章小结本章小结在面向对象设计过程中,设计者力图发现并提取共性以构造父类。子类承继了父类的功能,并根据详细需求来添加功能体需求来添加功能。由于

40、被承继的父类成员没有在子类声明中列出,所以读子类声明时会感到迷惑,但是这些成员确实存在于子类中。多态性使设计和实现扩展性更强的系统成为能够,当程序已开发出来后,仍旧可以方便的编程处置那些新添加的对象类型。多态性编程可减少运用switch语句,从而防止了与switch语句相关的错误。5.7 本章小结本章小结当经过父类援用调用一个方法时,Java会正确地选择与那个对象对应的类的覆盖方法。在多态性中,一个方法调用能够会产生不同动作,这取决于接受调用的对象类型。当从详细类子类中实例化某些对象时,这些援用可以用来对这些对象进展多态性操作。经常要把一些新类参与系统,这时可以用动态方法绑定也称迟绑定接纳它们

41、。在编译方法调用时,不需求知道对象的类型。只需执行时,才会选择相应对象的方法。在动态方法绑定中,执行方法调用时系统将会找到接受调用对象所属的类的相应方法。对于父类提供的方法,子类可以覆盖它的父类版本。5.7 本章小结本章小结一个接口的定义由关键字interface开场以包含pubic final static数据。但这不是必需的,即子类也可以运用一个方并包含一套public abstract方法,接口也可为运用接口,一个类必需声明实现关键字implements接口,指定的参数个数和前往类型定义每个方法。当没有缺省的实现用来承继时,通常运用接口而不运用笼统类。当某个类实现一个接口时,也有同样的“是一个承继性关系。并且必需根据接口中为实现一个以上的接口,只需在类定义中的关 键 字implements后面列出接口名逗号分隔。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!