面向对象程序设计-Java语言课件.ppt





《面向对象程序设计-Java语言课件.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计-Java语言课件.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于面向对象程序设计关于面向对象程序设计-Java语言语言第1页,此课件共72页哦而把类中的其他成员隐藏起来,用户不能访问。继而把类中的其他成员隐藏起来,用户不能访问。继承是面向对象程序设计的一个重要特征,它是通过承是面向对象程序设计的一个重要特征,它是通过一个类派生子类来实现的,这种结构对充分利用已一个类派生子类来实现的,这种结构对充分利用已有的类来创建更复杂的类,实现代码的复用具有重有的类来创建更复杂的类,实现代码的复用具有重要意义。多态是面向对象的程序中同名不同方法共要意义。多态是面向对象的程序中同名不同方法共存的现象,引入多态机制可以提高类的抽象度和封存的现象,引入多态机制可以提高类的
2、抽象度和封闭性,统一类的对外接口。通过本章的学习,读者闭性,统一类的对外接口。通过本章的学习,读者将深入了解类的这些特性。将深入了解类的这些特性。第2页,此课件共72页哦本章主要内容本章主要内容5.1 消息消息5.2 继承继承 5.3 抽象类、接口和包抽象类、接口和包5.4 封装封装5.5 多态多态 第3页,此课件共72页哦5.1 消消 息息在面向对象的系统中,对象间的相互作用是在面向对象的系统中,对象间的相互作用是通过一个对象向另一个对象发送消息的方式通过一个对象向另一个对象发送消息的方式来体现的。消息就是数据成员和成员方法的来体现的。消息就是数据成员和成员方法的引用。引用。第4页,此课件共
3、72页哦消息的概念消息的概念 消息就是向对象发出服务请求,是消息就是向对象发出服务请求,是对数据成员和成员方法的引用。对数据成员和成员方法的引用。消息的性质:消息的性质:(1)同一对象可接收不同形式的多个)同一对象可接收不同形式的多个消息,产生不同的响应。消息,产生不同的响应。第5页,此课件共72页哦(2)相同形式的消息可以发送给不)相同形式的消息可以发送给不同对象,所做出的响应可以是截然同对象,所做出的响应可以是截然不同的。不同的。(3)消息的发送可以不考虑具体的接)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是
4、必须息不予理会,对消息的响应并不是必须的。的。第6页,此课件共72页哦公有消息和私有消息公有消息和私有消息 对象之间的消息传递称为公有消息;对象之间的消息传递称为公有消息;而对象内部数据成员或成员方法之间而对象内部数据成员或成员方法之间的调用称为私有消息。的调用称为私有消息。【例例5.1】公有消息和私有消息示公有消息和私有消息示例。例。第7页,此课件共72页哦5.2 继继 承承继承是面向对象程序设计的又一种重继承是面向对象程序设计的又一种重要手段,在面向对象程序设计中,采要手段,在面向对象程序设计中,采用继承机制可以有效地组织程序结构,用继承机制可以有效地组织程序结构,设计系统中的类,明确类之
5、间的关系,设计系统中的类,明确类之间的关系,充分利用已有的类来创建更复杂的类,充分利用已有的类来创建更复杂的类,大大提高程序开发的效率,提高代码大大提高程序开发的效率,提高代码的复用率,降低维护的工作量。的复用率,降低维护的工作量。第8页,此课件共72页哦 继承的概念继承的概念 继承所表达的就是一种对象类之继承所表达的就是一种对象类之间的相交关系,它使得某类对象可间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和以继承另外一类对象的数据成员和成员方法。成员方法。继承避免了对一般类和特殊类之间继承避免了对一般类和特殊类之间共同特征进行的重复描述,运用继共同特征进行的重复描述,运用继承原
6、则使得系统模型比较简练也比承原则使得系统模型比较简练也比较清晰。较清晰。第9页,此课件共72页哦父类与子类之间的关系如图所示:父类与子类之间的关系如图所示:学生小学生中学生大学生研究生留学生初中生专科生高中生本科生硕士生博士生第10页,此课件共72页哦继承的特征继承的特征(1)继承关系是传递的。)继承关系是传递的。(2)继承简化了人们对事物的认识和描述,)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。能清晰体现相关类间的层次结构关系。(3)提供软件复用功能。)提供软件复用功能。(4)通过增强一致性来减少模块间的)通过增强一致性来减少模块间的接口和界面,大大增加程序的易维护
7、性。接口和界面,大大增加程序的易维护性。(5)提供多继承机制。)提供多继承机制。第11页,此课件共72页哦 继承的实现继承的实现 在在Java程序设计中,继承是通过程序设计中,继承是通过extends关键字来实现的。在定义类时使用关键字来实现的。在定义类时使用extends关键字指明新定义类的父类,新关键字指明新定义类的父类,新定义的类称为指定父类的子类,就在两定义的类称为指定父类的子类,就在两个类之间建立了继承关系。这个新定义个类之间建立了继承关系。这个新定义的子类可以从父类那里继承所有非的子类可以从父类那里继承所有非private的属性和方法作为自己的成员。实的属性和方法作为自己的成员。实
8、际上,在定义一个类而不给出际上,在定义一个类而不给出extends关键关键字及父类名时,默认这个类是系统类字及父类名时,默认这个类是系统类Object的子类。的子类。第12页,此课件共72页哦1数据成员的继承:子类可以继承父类数据成员的继承:子类可以继承父类的所有非私有的数据成员。的所有非私有的数据成员。【例例5.2】数据成员继承示例。数据成员继承示例。2数据成员的隐藏数据成员的隐藏:在子类中重新定:在子类中重新定义一个与父类中已定义的数据成员名完义一个与父类中已定义的数据成员名完全相同的数据成员,即子类拥有了两个全相同的数据成员,即子类拥有了两个相同名字的数据成员,一个是继承父类相同名字的数
9、据成员,一个是继承父类的,另一个是自己定义的。的,另一个是自己定义的。第13页,此课件共72页哦当子类引用这个同名的数据成员时,当子类引用这个同名的数据成员时,默认操作是引用它自己定义的数据默认操作是引用它自己定义的数据成员,而把从父类那里继承来的数成员,而把从父类那里继承来的数据成员据成员“隐藏隐藏”起来。当子类要操起来。当子类要操作继承自父类的同名数据成员时,作继承自父类的同名数据成员时,可使用关键字可使用关键字super引导。引导。【例例5.3】数据成员隐藏示例。数据成员隐藏示例。第14页,此课件共72页哦3成员方法的继承:子类可以继成员方法的继承:子类可以继承父类的非私有成员方法。承父
10、类的非私有成员方法。【例例5.4】成员方法继承示例。成员方法继承示例。4成员方法的覆盖:子类可以重新成员方法的覆盖:子类可以重新定义与父类同名的成员方法,实现对定义与父类同名的成员方法,实现对父类方法的覆盖。方法的覆盖与数据父类方法的覆盖。方法的覆盖与数据成员的隐藏的不同之处在于:成员的隐藏的不同之处在于:第15页,此课件共72页哦子类隐藏父类的数据成员只是使之不子类隐藏父类的数据成员只是使之不可见,父类同名的数据成员在子类对可见,父类同名的数据成员在子类对象中仍然占有自己独立的内存空间;象中仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将而子类方法对父类同名方法的覆盖将清除父类方
11、法占用的内存,从而使父清除父类方法占用的内存,从而使父类方法在子类对象中不复存在。类方法在子类对象中不复存在。【例例5.5】成员方法覆盖示例。成员方法覆盖示例。第16页,此课件共72页哦this与与super 1this的使用场合。在一些容易混的使用场合。在一些容易混淆的场合,例如,成员方法的形参淆的场合,例如,成员方法的形参名与数据成员名相同,或者成员方名与数据成员名相同,或者成员方法的局部变量名与数据成员名相同法的局部变量名与数据成员名相同时,在方法内借助时,在方法内借助this来明确表示来明确表示引用的是类的数据成员,而不是形引用的是类的数据成员,而不是形参或局部变量,从而提高程序的可参
12、或局部变量,从而提高程序的可读性。读性。第17页,此课件共72页哦简单地说,简单地说,this代表了当前对象的一代表了当前对象的一个引用,可将其理解为对象的另一个个引用,可将其理解为对象的另一个名字,通过这个名字可以顺利地访问名字,通过这个名字可以顺利地访问对象、修改对象的数据成员、调用对对象、修改对象的数据成员、调用对象的方法。归纳起来,象的方法。归纳起来,this的使用场的使用场合有下述合有下述3种:种:第18页,此课件共72页哦(1)用来访问当前对象的数据成员,其使)用来访问当前对象的数据成员,其使用形式如下:用形式如下:this.数据成员数据成员(2)用来访问当前对象的成员方法,其使)
13、用来访问当前对象的成员方法,其使用形式如下:用形式如下:this.成员方法(参数)成员方法(参数)(3)当有重载的构造方法时,用来引用同类的)当有重载的构造方法时,用来引用同类的其他构造方法,其使用形式如下:其他构造方法,其使用形式如下:this(参数)(参数)第19页,此课件共72页哦【例例5.6】this使用示例。使用示例。【例例5.7】使用使用this示例。示例。2super的使用场合。的使用场合。super表示的表示的是当前对象的直接父类对象,是当前是当前对象的直接父类对象,是当前对象的直接父类对象的引用。对象的直接父类对象的引用。super的使用方法有的使用方法有3种:种:第20页,
14、此课件共72页哦(1)用来访问直接父类隐藏的数据成员,)用来访问直接父类隐藏的数据成员,其使用形式如下:其使用形式如下:super.数据成员数据成员(2)用来调用直接父类中被覆盖的成)用来调用直接父类中被覆盖的成员方法,其使用形式如下:员方法,其使用形式如下:super.成员方法(参数)成员方法(参数)(3)用来调用直接父类的构造方法,其使)用来调用直接父类的构造方法,其使用形式如下:用形式如下:super(参数)(参数)【例例5.8】super使用示例。使用示例。第21页,此课件共72页哦5.3 抽象类、接口和包抽象类、接口和包抽象类体现数据抽象的思想,是实抽象类体现数据抽象的思想,是实现程
15、序多态性的一种手段。接口则现程序多态性的一种手段。接口则是是Java中实现多重继承的唯一途径。中实现多重继承的唯一途径。包是一个更大的程序单位,主要实现包是一个更大的程序单位,主要实现软件复用。软件复用。第22页,此课件共72页哦 抽象类抽象类 假设要编写一个计算圆、三角形和矩形假设要编写一个计算圆、三角形和矩形面积与周长的程序,若按前面所学的方式面积与周长的程序,若按前面所学的方式编程,必须定义编程,必须定义4个类:圆类、三角形类、个类:圆类、三角形类、矩形类和使用前矩形类和使用前3个类的公共类,它们之个类的公共类,它们之间没有继承关系。程序写好后虽然能执行,间没有继承关系。程序写好后虽然能
16、执行,但从程序的整体结构上看,但从程序的整体结构上看,3个类之间的许个类之间的许多共同属性和操作在程序中没有很好地利多共同属性和操作在程序中没有很好地利用,用,第23页,此课件共72页哦如图所示,致使重复编写代码,降如图所示,致使重复编写代码,降低了程序的开发效率,且使出现错低了程序的开发效率,且使出现错误的机会增加。误的机会增加。圆类圆类圆心坐标圆心坐标半径半径计算面积计算面积计算周长计算周长三角形类三角形类底边长底边长高高计算面积计算面积计算周长计算周长矩形类矩形类长长宽宽计算面积计算面积计算周长计算周长第24页,此课件共72页哦分析上面例子中的分析上面例子中的3个类,可以看到个类,可以看
17、到这这3个类都要计算面积与周长,虽个类都要计算面积与周长,虽然公式不同但目标相同。因此,可然公式不同但目标相同。因此,可以为这以为这3个类抽象出个类抽象出1个父类,在父个父类,在父类里定义圆、三角形和矩形类里定义圆、三角形和矩形3个类共个类共同的数据成员及成员方法,把计算面同的数据成员及成员方法,把计算面积与周长的成员方法名放在父类给予积与周长的成员方法名放在父类给予说明,而具体的计算公式再在子类中说明,而具体的计算公式再在子类中实现。实现。第25页,此课件共72页哦这样,通过父类就大概知道子类所这样,通过父类就大概知道子类所要完成的任务,而且,这些方法还要完成的任务,而且,这些方法还可以应用
18、于求解平行四边形、梯形可以应用于求解平行四边形、梯形等图形的周长与面积,如图等图形的周长与面积,如图5-4所示。所示。这种结构就是抽象类的概念。这种结构就是抽象类的概念。第26页,此课件共72页哦抽象类抽象类抽象方法抽象方法梯形类梯形类上上、下下底底边边长长高高抽象方法抽象方法圆类圆类圆心坐标圆心坐标半径半径计算面积计算面积计算周长计算周长三角形类三角形类底边长底边长高高计算面积计算面积计算周长计算周长矩形类矩形类长长宽宽计算面积计算面积计算周长计算周长第27页,此课件共72页哦抽象类刻画了公有行为的特征,并通过继抽象类刻画了公有行为的特征,并通过继承机制传送给它的派生类。在抽象类中定承机制传
19、送给它的派生类。在抽象类中定义的方法称为抽象方法,这些方法只有方义的方法称为抽象方法,这些方法只有方法头的声明,而用一个分号来代替方法体法头的声明,而用一个分号来代替方法体的定义,即只定义成员方法的接口形式,的定义,即只定义成员方法的接口形式,而没有具体操作,只有派生类对抽象成员而没有具体操作,只有派生类对抽象成员方法的重定义才能真正实现与该派生类相方法的重定义才能真正实现与该派生类相关的操作。关的操作。第28页,此课件共72页哦在各子类继承了父类的抽象方法之后,再在各子类继承了父类的抽象方法之后,再分别用不同的语句和方法体来重新定义它,分别用不同的语句和方法体来重新定义它,形成若干个名字相同
20、、返回值相同、参数形成若干个名字相同、返回值相同、参数列表相同、目的一致但是具体实现有一定列表相同、目的一致但是具体实现有一定差别的方法。抽象类中定义抽象方法的目差别的方法。抽象类中定义抽象方法的目的是实现一个接口,多种方法的原理,即的是实现一个接口,多种方法的原理,即所有的子类对外都呈现一个相同名字的方所有的子类对外都呈现一个相同名字的方法。法。第29页,此课件共72页哦抽象类是它的所有子类公共属性的集合,抽象类是它的所有子类公共属性的集合,是包含一个或多个抽象方法的类。使用是包含一个或多个抽象方法的类。使用抽象类的一大优点就是可以充分利用这抽象类的一大优点就是可以充分利用这些公共属性来提高
21、开发和维护程序的效些公共属性来提高开发和维护程序的效率。对于抽象类与抽象方法的限制如下:率。对于抽象类与抽象方法的限制如下:(1)凡是用)凡是用abstract修饰符修饰的类被称修饰符修饰的类被称为抽象类。凡是用为抽象类。凡是用abstract修饰符修饰的修饰符修饰的成员方法被称为抽象方法。成员方法被称为抽象方法。第30页,此课件共72页哦(2)抽象类中可以有零个或多个抽象方法,)抽象类中可以有零个或多个抽象方法,也可以包含非抽象方法。也可以包含非抽象方法。(3)抽象类中可以没有抽象方法,但是,有抽象)抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。方法的类必须是抽象类。(4)对于
22、抽象方法来说,在抽象类中只指定其方)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。法名及其类型,而不书写其实现代码。(5)抽象类可以派生子类,在抽象类派生的)抽象类可以派生子类,在抽象类派生的非抽象子类中必须实现抽象类中定义的所有抽非抽象子类中必须实现抽象类中定义的所有抽象方法。象方法。第31页,此课件共72页哦(6)抽象类不能创建对象,创建对象的工作由抽)抽象类不能创建对象,创建对象的工作由抽象类派生的非抽象子类来实现。象类派生的非抽象子类来实现。(7)如果父类中已有同名的)如果父类中已有同名的abstract方法,则子类方法,则子类中就不能再有同名的抽象方法。中就
23、不能再有同名的抽象方法。(8)abstract不能与不能与final并列修饰同一个类。并列修饰同一个类。(9)abstract不能与不能与private、static、final或或native并并列修饰同一个方法。列修饰同一个方法。(10)abstract类中不能有类中不能有private的数据成员或成员的数据成员或成员方法。方法。第32页,此课件共72页哦【例例5.9】抽象类应用。抽象类应用。注意:注意:在上例中,只能在在上例中,只能在C5_9类中类中main方法中方法中定义定义3个子类的对象,使它们称为个子类的对象,使它们称为main方法的局部对象,而不能将它们定义在方法的局部对象,而不
24、能将它们定义在main方法之外,因为非方法之外,因为非static方法是不能方法是不能在在static方法中被引用的,而方法中的局部方法中被引用的,而方法中的局部变量不能带修饰符,它们不受此限制。变量不能带修饰符,它们不受此限制。第33页,此课件共72页哦 接口接口 多重继承是指一个子类可以有多个直接多重继承是指一个子类可以有多个直接父类,该子类可以全部或部分继承父类,该子类可以全部或部分继承所有直接父类的数据成员及成员方所有直接父类的数据成员及成员方法。法。在面向对象的程序设计语言中,有些语在面向对象的程序设计语言中,有些语言(如言(如C+)提供了多继承机制。)提供了多继承机制。而而Java
25、出于安全性、简化程序结构出于安全性、简化程序结构的考虑,不支持类间的多继承而只的考虑,不支持类间的多继承而只支持单继承。支持单继承。第34页,此课件共72页哦然而在解决实际问题的过程中,在然而在解决实际问题的过程中,在很多情况下仅仅依靠单继承不能将很多情况下仅仅依靠单继承不能将复杂的问题描述清楚。为了复杂的问题描述清楚。为了Java程程序的类间层次结构更加合理,更符合序的类间层次结构更加合理,更符合实际问题的本质要求,实际问题的本质要求,Java语言提供语言提供接口来实现多重继承机制。接口来实现多重继承机制。第35页,此课件共72页哦1声明接口,格式如下:声明接口,格式如下:修饰符修饰符 in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 Java 语言 课件

限制150内