《Java课件第五讲面向对象基本概念.ppt》由会员分享,可在线阅读,更多相关《Java课件第五讲面向对象基本概念.ppt(39页珍藏版)》请在三一办公上搜索。
1、第5讲 面向对象程序设计基本概念,1.对象2.类3.封装4.继承,5.多态6.多重继承7.接口8.包,对象(object),我们可以把生活所在的真实世界(Real World)当作是由许多大小不同的对象所组成的。对象可以是有生命的个体。,对象,对象也可以是无生命的个体。,对象也可以是一件抽象的概念。,对象的特征,对象有两个特征:状态(state)和行为(behavior)。例如:一个人有他的身高或体重作状态,并有他的行为如唱歌、打球、骑摩托车、开汽车。一只狗有它的颜色作状态,也有它的行为,如吠叫或跳跃。而在程序设计中,软件对象的概念由真实世界对象而来。面向对象程序设计中,软件对象将状态保存在变
2、量(variables)或称数据字段(data field)里,而行为则借助方法(methods)来实现。,软件对象的定义,定义:对象是由变量(数据字段)及相关方法所组成的软件包(software bundle),汽车对象,以汽车为例,我们可定义其状态与方法如下:,OOP三大特性:封装、继承与多态,封装,封装,封装用来将对其他对象不是重要的实行细节隐藏起来。OOP将数据成员(Data Member)和属于此数据的操作方法(operating method),都放在同一个实体(entity)或称对象(object)中,这就是所谓的封装。,封装,封装的用意,是避免数据成员被不正当的存取,以达到信息
3、隐藏(information hiding)的效果,避免错误的存取发生。封装的好处:1.模块化(modularity):一个对象的原始文件可以独立地被撰写及维护而不影响其他对象。而且对象可以轻易地在系统中来回地传递使用。2.信息隐藏(information hiding):一个对象可以和其他的对象之间进行沟通,但该对象仍然维持私有的信息及方法,这些信息及方法可以在任何时间被修改,而不影响那些依赖于该对象的其他对象。,消息(message),软件对象是通过传送消息给其他对象来达到交互及沟通的目的。如下图所示:,消息(message),一个消息是由3个元素所组成:1.消息目标对象(你的汽车)。2.
4、执行方法的名字(换档)。3.执行方法所需用的参数(低、高速档)。如:g.drawString(“你好Java!”,50,50);,类(class),在真实世界里,有许多同“种类”的对象。而这些同“种类”的对象可被归类为一个“类”。,实例(instance),你的汽车只是这世界中许多汽车中的一个。我们就称你的汽车对象是汽车类中的一个实例(instance)。,软件对象蓝图类(class),在面向对象软件设计里,也可以利用此原理来制造一些软件对象蓝图。这些软件对象蓝图就称作类(class)。,定义:一个类就是一个蓝图或原型,定义了通用于一特定种类的所有对象之变量及方法。,软件对象蓝图类(class
5、),对象(实例)的产生new关键字,类就好比一个蓝图。那实例(instance)就是从一种类里所产生具有此类的状态(变量)与行为(方法)的真实对象。在面向对象程序设计里是用“new”这个关键字来产生实例。,例:,JOptionPane jop;jop=new JOptionPane();,类变量&类方法,所谓的类变量(静态变量)、类方法(静态方法),指的是用“static”修饰的变量、方法。其地位与类等同。在内存中只有一个地方存放。当系统在程序中第一次遇到一个类时,便会拷贝一份所有的类变量在内存里。然后那些属于此类的实例便分享这些类变量。因此,你可以直接利用类来存取类变量和类方法,而不用将类实
6、例化后才取用。,实例变量&实例方法,当你从一种类产生一个实例时,就等于制造了一个对象。而实例产生后,便拥有与类“同类型”但内存地址不同的变量(除了类变量外),称之为实例变量(instance variables)。每个实例各自拥有自己的变量,而系统就会为这些实例变量个别配置内存。但实例方法却仍留在类里,并不会再复制到实例中。但你仍可以调用这些方法来令实例对象做些事。实例方法指的是那些并没有用static修饰符的methods。,继承(inheritance),OOP便是以类来定义一个对象的。当我们要使用一个对象(的变量或方法)时,首先要想到它是属于哪一种类的。不仅对象是以类来定义,更进一步地,
7、类也可以用其他类来定义,现以下图来说明:,继承(inheritance),这样在父类中只定义一些通用的状态与实现部分的行为,到了子类中才实现细节,我们称此父类为抽象类(abstract class)。在抽象类中只定义一些状态,和实现少部分行为。这样其他的程序设计师就可依照他们所要的特定子类进行实现与定义。,类层级(class hierarchy),类继承关系可不仅只是一层关系而已,它可以有好几层。这种树状关系,我们可称作类层级(class hierarchy)。至于层级数可依照实际需要而定。,继承的产生extends 关键字,例如:public class HelloWorld extends
8、 Applet继承的好处:1.重复利用父类程序代码。这样在撰写子类时,只要针对其所需的特别状态与行为来写即可。提高程序撰写的效率。2.先写出定义好却尚未实现的抽象父类,可使得在设计子类时,简化设计过程,只要将定义好的方法填满即可。,this与super关键字,this与super分别指着有继承关系的子、父类。this出现在程序代码中,指的是所在的该类对象。super指的是所继承的父类对象。this与super 均不用先声明即可自行使用。,方法覆盖(method overriding),覆盖的意思是不用考虑父类的方法是如何写的,只要重新定义改写,就可“盖”过去。,多态(polymorphism)
9、,在同一个类中可有许多同名的方法,但其参数数量与类型不同,而且运作过程与回传值也可能会不同,这就是我们所谓的多态。,构造函数(constructors),构造函数是一种特别的类方法,其命名与类同名,但不具有回传值。可接受多种类型、数量的传入参数,然后做不同的运算。构造函数通常用于初始值设置。,例如java.lang包中的String类里,有多种的构造函数:,String()String(bytebytes)String(byteascii,inthibyte)String(bytebytes,intoffset,intlength)String(byteascii,inthibyte,into
10、ffset,intcount)String(bytebytes,intoffset,intlength,Stringenc)String(bytebytes,Stringenc)String(charvalue)String(charvalue,intoffset,intcount)String(Stringvalue)String(StringBufferbuffer),方法重载(method overloading),所谓的方法重载,是指调用一个类中具有同名异式方法,但在执行时期(run-time)才根据其参数数量与类型来判断要调用此方法的哪一种operation。,例:,Account.
11、javaCheckingAccount.java,Java OOP的其他重要特性,多重继承(multi-inheritance),一个对象可以隶属于数种不同的类。这种多元性的继承关系就叫做多重继承。,注意:Java不支持多重继承,接口(interface),Interface 这个英文字的意思是一种装置或系统,使得不同性质的实体(entities)能够交互地运作。而在Java里,设计接口的用意,是可使得类不必受限于单一继承的关系,而可灵活地同时继承一些共有的特性,达到多重继承的目的,而免去C+中多重继承的复杂关系所产生的问题。,接口的实现implements关键字,使用implements关键
12、字,可使类能同时实现多种接口。例如:public class JApplet_1 extends Applet implements AppletContext,AudioClip;,包(package),Java将其API中相关的类及接口组织成一个包(package)。这样的好处是:你不必将需要用到的类及接口一个个引用进来,你只要用import关键字引入一个包,便可将此包中所有的接口及类都引用进来。,包的引用import关键字,例:import java.applet.Applet;import java.awt.Graphics;包的另一个好处是,在不同包中,可用相同的类名称而不产生冲突。,