面向对象程序设计概述.ppt

上传人:本田雅阁 文档编号:2605238 上传时间:2019-04-16 格式:PPT 页数:159 大小:599.51KB
返回 下载 相关 举报
面向对象程序设计概述.ppt_第1页
第1页 / 共159页
面向对象程序设计概述.ppt_第2页
第2页 / 共159页
面向对象程序设计概述.ppt_第3页
第3页 / 共159页
亲,该文档总共159页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《面向对象程序设计概述.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计概述.ppt(159页珍藏版)》请在三一文库上搜索。

1、面向对象程序设计概述,面向对象编程,2,程序设计方法,公共数据,算法数据结构,对象消息,面向对象编程,3,程序设计方法,面向过程的程序设计 面向过程的程序遵循面向过程的问题求解方法 其中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。 算法+数据结构 数据结构利用计算机的离散逻辑来量化表达需要解决的问题 。 而算法则研究如何快捷、高效地组织解决问题的具体过程。 面向过程面向机器,面向对象编程,4,程序设计方法,面向对象的程序设计 面向对象问题求解关心的不仅仅是孤立的单个过程,而是孕育所有这些过程的母体系统 它能够用计算机逻辑来模拟、描述系统本身,包括系统的组成,系统的

2、各种可能状态,以及系统中可能产生的各种过程与过程引起的系统状态切换。 面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素。 对象是一种看问题的观点,是对现实世界各种元素的一种抽象。对象既含数据又含功能,因此具有自身处理数据的能力。对象被认为是迄今为止最接近真实事物的数据抽象。,面向对象编程,5,对象与过程,考虑对象 考虑过程 :前者更有意义 设计对象 设计过程:前者更富挑战性,尤其是设计可重用的对象。 面向对象的程序设计和问题求解力求符合人们日常自然的思维习惯,降低分解问题的难度和复杂性,提高整个求解过程的可控制性、可监测性和可维护性,从而达到以较小的代价和较高的效率获得较满

3、意效果的目的。,面向对象编程,6,对象的几个特征,Everything is an object 原则上,可以将所要解决的问题中的任何一个 “概念组件”在程序中表示为一个对象。 对象类似一个记录,可以存储数据,但你还可以让它执行某些操作(作用在它自身的数据上) A program is a bunch of objects telling each other what to do by sending messages 所谓 对一个对象发信息,就是调用该对象的一个方法。 Every object has a type each object is an instance of a class

4、 对象+消息,面向对象编程,7,现实中的对象,现实世界中对象有两个共同的特点: 一方面,它们都有自己的状态,如一台电 视机有自己的摆放位置,有关机和开机状 态,此刻正在播放某一频道的电视节目等 另一方面,它们又都有自己的行为或功能, 如电视机的开机、关机、调台等。,面向对象编程,8,对象的属性与方法,面向对象程序设计中的对象是现实世界对象的模型化,它同样具有状态和行为。 对象的状态用属性来维护, 对象的行为用方法来实现。 因此可以简单地讲,对象是面向对象的程序设计模式,它由描述状态的属性(变量)和用来实现对象行为的方法(代码)组成。 几种叫法 属性 静态属性 域 成员变量 状态 方法 动态属性

5、 成员方法 行为,面向对象编程,9,案例-定单系统,成立新的公司时尚服装。 每月发布商品编目,并寄给定户。 客户可以发e-mail 或FAX定货(寄定单)。 对于客户的定货要检查存货清单,如缺货,得暂时搁置定单,直到供货商送到货。 公司检查支票和信用卡。 公司将定单下发给仓库,给客户发货。 注意: 同种商品每月价格不一。如果订户使用的是六个月之前的编目,价格采用当前编目价格。 公司接受所有主要的信用卡。,面向对象编程,10,分析对象,系统是由相互作用的对象组成。任何系统需要它的对象做它的工作。 案例对象:定单,服装,客户 在一个问题域中识别对象不是科学而是艺术。对象取决于人的观点(模块化,应用

6、) 从“名词”开始确定系统中的对象。对象可以是: 简单的和复杂的:衬衣,银行 实际的和概念的:银行出纳员,银行帐号,面向对象编程,11,对象的属性和方法,确定对象的属性和方法 对象属性:可以是数据或对象。 客户客户号,客户名,地址 定单定单号,定货条目,顾客号(也可以是顾客对象)。 对象方法:让对象做的事情(可以对自己,也可以对其他对象),经常影响对象属性。 客户提交定单 定单打印定单,改变条目,面向对象编程,12,模型化对象,面向对象编程,13,测试对象,与问题域是否有关、适当? 是否独立存在 客户可以独立存在。 定单可以,但在使用时必须有客户配合。 是否有属性和方法。,面向对象编程,14,

7、对象与类,类(Class)是同种对象的集合与抽象 类是对象的抽象及描述,它是具有统一属性和方法的多个对象的统一描述体,是用来定义一组对象共有属性和方法的模板。 类是用来创建对象实例的样板,它包含所创建对象的状态描述和方法的定义。类是一个型,而对象则是这个型的一个实例。 类是静态概念,而对象则是一个动态概念,因为只有在运行时才给对象分配空间,对象才真正存在。,面向对象编程,15,对象是类的唯一性实例,现实世界,实体,抽象数据类型,计算机世界,对象,类,抽 象,映射,计算机逻辑 的实现,实例化,抽象,概念世界,面向对象编程,16,接口与实现,类是一种封装技术。 如果属性或方法被定义为public

8、,它就是接口的一部分,其他类可以直接访问它。 如果属性或方法被定义为private,它就是实现的一部分。只有类自己的方法可以访问它。 对象要注意保护自己的数据(私有属性,公有方法)。对象通过它们的方法管理,实现由编程人员控制。 通过接口与对象发生作用,内部实现不影响接口(汽车,内部变化不影响驾驶)程序一部分变化不会影响其他部分。 复用 事先写好的操作可在整个项目中使用 重用比重写更容易,面向对象编程,17,对象与类几种相互关系,包含关系 当对象A是对象B的属性时,我们称对象B包含对象A。 关联关系 当对象A的引用是对象B的属性时,我们称对象A和对象B之间是关联关系。 类之间的继承关系 B类继承

9、了A类,就是继承了A类的属性和方法。 A类称之为父类,B类称之为子类。,面向对象编程,18,为什么要学习面向对象编程,面向对象技术的意义 人脑与电脑的思维 如何解决软件危机 学习面向对象的紧迫性 现在已经到了如果不了解面向 对象编程,作为一个程序员就抬 不起头来的时候了。,面向对象编程,19,面向对象技术意义,目前的计算机功能很强,但目前的计算机并不很合理。最大的不合理是来自人认识问题时的认识空间和计算机处理问题时的方法空间的不 一致,人与目前的计算机之间仍存在着较大的隔阂。而面向对象技术有助于减小这一隔阂、并使这两个空间尽量趋于一致。 软件复用 类库的使用(可重用的标准化的模块) 类的继承

10、面向对象技术应用的普遍性,面向对象编程,20,面向对象技术-人人受益,for manager 更迅速和更经济地开发和维护软件系统。 for analysts and designers 模块化的过程将变的简单,并能获得一个清晰的、易于管理的设计方案。 for programmers 清晰的对象模型,丰富的面向对象开发工具及类库使得编程变为一件饶有兴趣的工作。程序员明显感到编程效率的提高。,面向对象程序设计基础,面向对象编程,22,主要内容,抽象 封装 继承 多态 类定义 重载 包 接口,面向对象编程,23,OOP的主要特点,抽象 去除对象中与主旨无关的次要部分,而 仅仅抽取出与研究有关的内容(

11、数据抽象),面向对象编程,24,抽象,在软件开发方法中使用的抽象有两类:过程抽象和数据抽象 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤 数据抽象把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型包含了数据,也包含了针对这些数据的授权操作。面向对象的软件开发采用数据抽象的方法来构建程序的类、对象和方法。,面向对象编程,25,抽象,所有编程语言都提供“抽象”功能。 你所能解决问题的复杂程度取决于抽象的种类和质量。 汇编语言对于计算机(机器语言)是一步很小的抽象。 过程化语言(高级语言)相对于汇编语言的抽象迈

12、了一大步。但你所考虑的仍然是机器的结构而非问题的结构。 面向对象方法为程序员提供了一种表示问题空间元素的全新的方法,且不受问题类型的约束。,面向对象编程,26,抽象,问题空间元素方法空间中的表示:对象 “对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。 面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素。 面向对象语言更加贴近人的思维方式。OOP允许你用问题空间中的术语来描述问题。,面向对象编程,27,OOP的主要特点,封装(encapsulation) 实现了信息的隐藏及安全性 提高了程序的模块化,且易于维护,面向对象编程,28,封装-信息隐藏,封装 是一种组织软件的

13、方法。其基本思想是把客观世界中联系紧密的元素及相关操作组织在一起,使其相互关系隐藏在内部,而对外仅仅表现为与其他封装体间的接口。从而构造出具有独立含义的软件实现。 封装并不是一个新的概念,但在面向对象的程序设计中提出了一种全新的封装方法 类,面向对象编程,29,封装-信息隐藏,封装 就是利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能与这些抽象数据类型交流和交互。 在面向对象的程序设计中,抽象数据类型是用“类”来代表的。,面向对象编程,30,封装-信息隐藏,每个类里都封装了相关的数据和操作。在实际的开发过

14、程中,类多用来构建系统内部的模块。 由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。,面向对象编程,31,封装-软件复用,封装使得对象: 对内成为一个结构完整、可自我管理、自 我平衡、高度集中的整体。 对外则是一个功能明确、接口单一、可在 各种合适的环境下都能独立工作的有机的 单元。 类的封装特性使得类可重用性大为提高,这样的有机单元特别适宜构建大型标准化的应用软件系统,可以大幅度地提高生产效率。,面向对象编程,32,OOP的主要

15、特点,继承(inheritance) 体现了对现实世界的抽象模拟 提高了代码的复用性,面向对象编程,33,OOP的主要特点,多态(polymorphism) 用同一个名字调用实现不同操作的方法 方式1:不同的类之间的同名方法 如:中国人/日本人/美国人 说话 方式2:参数不同的同名方法 使用方便,且降低了维护和编程量,面向对象编程,34,Java中的类,几个概念 类:同种对象的集合与抽象 系统类库中已定义好的类:是系统提供 的已实现的标准类的集合,是Java的API,它可帮助开发者方便、快捷地开发Java程序。 用户自定义的类 针对特定问题 子类、父类,面向对象编程,35,Java中的类,Ja

16、va中的类结构 基类:所有Java的类都派生自Object Java的类可组织在包(package)中 Java提供的标准类库分布在一系列的包中,如java.lang,java.util,等 (参见 P.117) 编程的过程就是继承基类或标准类而创建、定义特殊子类的过程,面向对象编程,36,在程序中定义你抽象出的类,新类必须在已有类的基础上构造。 在已有类的基础上构造新类的过程称为派生。 派生出的新类称为已有类的子类。已有类称为超类(父类)。 子类继承父类的属性和方法。 当没有显式指定父类时,父类隐含为java.lang包中的Object类。,面向对象编程,37,Java中类的声明,类说明语法

17、: 类修饰符 class 类名 extends 父类名 implements 接口名 成员变量定义; 方法定义; ,类体,面向对象编程,38,Java中类的声明,类修饰符(Modifier): public:允许其他类(没有限制)访问本类,一个 源文件仅可以有一个public类 缺省:可被当前包中的其他类访问 abstract:没有实例的抽象概念类,是它的所有子类 的公共属性和公共方法的集合 final:不能再被扩展,不能有子类的类;易于安全 性的实现,或用于创建固定功能的类 父类继承声明:extends 父类名 实现接口(interface):implements 接口名,面向对象编程,39

18、,Java中类的声明,例: public abstract class shape class rectangle extends shape final class roundrect extends rectangle 注意: final可以与abstract一起使用吗?,面向对象编程,40,创建对象,对象(实例instance):以类为模板创建的 具体实例(实际个体) 创建某个类的具体对象(类似变量声明) 类名 欲创建的对象名new 类名(参数表) ; 例如: String s = new String( “Hello!” ) ;,面向对象编程,41,类的成员变量的声明,声明成员变量(m

19、ember)的语法 修饰符 数据类型 变量名; 引用:对象名.变量名 修饰符 访问控制符 public:可被所有其他类引用 private:仅可被该类自身引用和修改,不能被其他任何类(包括该类的子类)引用,它提供了最高级别的保护。,面向对象编程,42,成员变量的声明,protected:该类自身、子类、同一包中的其他类 private protected:该类自身、子类 注:private protected仅1.0.2支持, 1.1之后不再支持 缺省:本包中的类 static:类成员变量,对所有的实例一致,引用时前缀 可使用类名或对象名 final:数值不变常量,定义同时应对其进行初始化,面

20、向对象编程,43,成员变量的声明,例: class shape private protected int x; private protected int y; static final float MaxArea=100.0f; ,面向对象编程,44,成员变量的声明,class Employee String name ; int age ; float salary ; Employee e = new Employee( ) ; e.name=“张立” ; e.age=21; e.salary = 528.37F ;,final 类型 常量名=值,实例变量成员变量 其生命周期与对象存在

21、的时间相同。,面向对象编程,45,类成员变量(静态变量),静态变量为类的各实例共享的变量。 static 静态变量名; 位于类的内存区域中,为该类的各个对象共享. 无此限定符的变量是实例变量。 class ex int i ; static int j ; static final int k=10 ; - final 常量可同时定义为static,面向对象编程,46,类成员变量(静态变量),实现各实例之间的通讯 对于该类的任何一个对象访问该静态变量时,取得的都是相同的值 跟踪创建的实例数 public class Count private int serial ; /实例变量 privat

22、e static int counter = 0 ; /静态变量 public Count() counter+; serial = counter ; 静态变量类似于某些语言中的全局变量,面向对象编程,47,类成员变量(静态变量),非private 的静态变量无须创建实例就可以从类的外部访问。 class StaticVar static int x=100 ; public class test public void m() int m = StaticVar.x ; ,面向对象编程,48,类成员变量(静态变量),class PhoneCard200 static final Strin

23、g connectNumber = “200”; static double additoryFee; long cardNumber ; int password; boolean connected; double balance; ,面向对象编程,49,类成员变量(静态变量),public class a public static void main(String args) PhoneCard200 my200_1 = new PhoneCard200(); PhoneCard200 my200_2 = new PhoneCard200(); PhoneCard200.additor

24、yFee = 0.1; System.out.println(“第一张200卡的接入号码:” + my200_1.connectNumber); System.out.println(“第二张200卡的附加费: ” + my200_2.additoryFee); System.out.println(“200卡类的附加费:” + PhoneCard200.additoryFee) System.out.println(“200卡接入号码:” + PhoneCard200.connectNumber); ,面向对象编程,50,方法的声明,定义对类内成员变量(数据)的操作 方法的声明语法: 修饰符

25、 返回类型 方法名(参数列表) throws 例外名 方法体; 方法是类的动态属性,标志了类所具有的功能和操作,面向对象编程,51,类的方法定义规则,方法名后的小括号是方法的标志。 形式参数是方法从调用它的环境输入的数据。 返回值是方法在操作完成后返还给调用它的环境的数据。 要指定方法返回值类型。如没有返回值,类型要写 void 方法名相同,但参数不同,是不同的方法。 与类名相同的所有方法都是类的构造方法。,面向对象编程,52,方法体的定义,在方法中定义的变量称为局部变量。 其生命周期:执行进入方法体时建立,退出方法时撤消。 局部变量使用之前必须初始化。 在方法体中可以访问所有的类属性,可以调

26、用所有类中定义的方法。 方法可以递归调用。,面向对象编程,53,方法的声明,修饰符(Modifier): 访问控制符: public、private、protected、private protected static:静态方法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在方法体中只能使用static变量和static方法 abstract:只有方法头,而没有具体的方法体和操作实现的方法,要在子类中通过重新定义(override)来实现 final:不能被重新定义(override)的方法,面向对象编程,54,访问控制符,访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分

27、访问和调用的修饰符 。 类访问控制符 公共类 :public 类名 一般类(缺省) 一个类被声明为公共类,表明它可以被所有的其他类所访问和引用。程序的其他部分可以创建这个类的对象、访问这个类的内部可见成员变量和调用它的可见方法 一般类只能被同一包中的类访问和引用。 定义在同一个程序中的所有类属于一个包。,面向对象编程,55,一个类作为整体对程序的其他部分可见,并不能代表类内的所有成员变量和方法也同时对程序的其他部分可见,前者只是后者的必要条件 成员变量和方法的可见性,域和方法的访问限定符,面向对象编程,56,域和方法的访问限定符,为了使对象具有良好的封装性,一般将类的实例变量设计成私有。 为了

28、使其它类或对象能够访问私有实例变量,本类必须提供访问私有变量的方法(公共方法)。 按照惯例,读私有变量的方法取名为get 写私有变量的方法取名为 set,面向对象编程,57,方法的声明(续),返回类型:void、return 参数列表:参数类型可为类类型 throws: 通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。,面向对象编程,58,方法的参数,方法的参数要有名有型,参数的作用域在本方法中,在方法体中可以象方法体自己定义的变量一样使用。 参数是值传递 对象的内容可以改变,但对象的引用决不会改变。

29、 方法的参数可以与类的成员变量同名,这时,参数在方法体中将隐藏同名的成员变量。 class circle int x,y, radius ; setCircle (int x , int y , int radius ) ,面向对象编程,59,值传送与地址传送,A,B,A,B,A,B,面向对象编程,60,参数传递例,public class PassTest float m_float ; void change1(int pi) pi = 100; void change2(String ps) ps=new String(“Right”) ; void change3(PassTest p

30、o ) po.m_float=100.0 ; public static void main(String args) PassTest pt = new PassTest() ;,面向对象编程,61,参数传递例,int i = 22 ; pt.change1( i ) ; System.out.println(“i value is ” + i); String s = new String( “Hello” ) ; pt.change2( s ) ; System.out.println(“s value is ” + s); pt.m_float = 22.0F ; pt.change3

31、( pt ) ; System.out.println(“Current pt.m_float is ” + pt.m_float); / main() / class,面向对象编程,62,方法的说明,为Employee类增加打印方法将数据和代码封装在一个单一的实体中。 class Employee String name; int age; float salary ; void print() System.out.println(name + “年龄为: ” + age + “月薪为: ” + salary); /class,面向对象编程,63,对象方法的含义,Employee emp

32、= new Employee( ) ; emp.name=“张立” ; emp.age=21; emp.salary = 528.37F ; 一旦对象被建立并被初始化,就可以调用该方法打印这个对象的数据。 emp.print() ; 对象emp执行print 方法操作自己的数据。 向对象发消息,让对象做某件事。,面向对象编程,64,方法的声明,例: class shape private int x; static float MaxArea=100.0f; public void setx(int newx) x=newx; public int getx( ) return x; publ

33、ic static void setMA(float newMA) MaxArea=newMA; ,面向对象编程,65,类方法(静态方法),类方法: static 方法名() 使用类方法不用创建类的对象。调用这个方法时,建议使用类名做前缀,而不是使用某一个具体的对象名。 非static的方法是对象方法(或称实例方法)。 类方法中不能访问实例变量,而只能访问类变量(static方法 static域)。 类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。 类方法中没有this值。,面向对象编程,66,类方法(静态方法),public class a public static

34、void main(String args) System.out.println(Math.round(3.54); String s = to_char(2.718); System.out.println(“e=“ + s ); static String to_char(double x) return Double.toString(x); ,面向对象编程,67,类方法(静态方法),main方法是静态方法,这是为了使系统在没有任何实例化对象之前可以运行一个应用程序。 如果main方法要调用本类的其它方法: 将这些方法设计成静态方法 创建对象,使用对象方法。 一个静态方法不能被一个非静

35、态方法所覆盖。,面向对象编程,68,例子:银行业务,要求:处理简单帐户存取款、查询 面向对象的分析(OOA) 对象模型抽象:银行帐户 对象模型分析: 余额、存、取、查 面向对象的设计(OOD) 对象模型的实现:类及其成员定义 BankAccount类 Banlance, etc getBalance(), getMoney(), etc,面向对象编程,69,银行业务的程序结构,银行帐户类BankAccount,主类UseAccount,UseAccount.java,面向对象编程,70,小结类与对象,面向对象的数据和方法: 一个类的对象虽然具有相同的属性,但对象却各不相同(属性值不同)。 一个

36、类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不同。 共享的数据和方法: 类属性 在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。 类方法 不需要实例化就能使用的静态方法,虽然它们也能通过实例来访问。,面向对象编程,71,小结类与对象,类名.域名 静态域,在类的空间里,是该类对象共享的单元 类名.方法名 静态方法 类方法的调用 类方法及域也可以用对象名调用,但最好用类名 对象名.属性名 实例变量 。通过方法操作属性。 对象名.方法名 方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。,面向对象编程,72,

37、小结类与对象,访问一个类: 创建该类的对象,并使用该类对象的可见属性与方法。 调用该类的可见静态方法,访问该类的可见静态属性。 继承该类。 final final类不能被继承。 final 方法不能被覆盖。 final 域不能被修改。,面向对象编程,73,小结封装,类中的数据使用private定义。 使用public方法来操作数据。 把逻辑上相关联的数据封装成新的类来使用,类似结构体。 不要定义太庞大的类,要把无关的功能适当分离。 培养良好的编程风格。,面向对象编程,74,this与super,this和super是常用来指代子类对象和父类对象的关键字。Java系统默认,每个类缺省地具有nul

38、l、this和super三个域,所以在任意类中都可以不加说明而直接使用它们。 this表示的是当前对象本身,更确切地说,this代表了当前对象的一个引用。利用this可以使用当前对象的域,调用当前对象的方法。 super 表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。,面向对象编程,75,方法中使用this,class Banana void f(int i) . Banana a = new Banana(); b = new Banana(); a.f(1); b.f(2); 方法如何知道是处理哪个对象? 编译做了一些内部处理 Banana.f(a,1); Banana.

39、f(b,2); 把一个隐含的参数传给了方法指向被操作对象的引用。,面向对象编程,76,this,如果你在方法中想拿到这个引用 this class Banana void pick() void pit() this.pick(); / pick() public class MyDate int day , month , year ; public void tomorrow() this.day = this.day + 1 ; /day = day + 1 ,面向对象编程,77,this,this 只能在方法中使用,表示当前对象,或类的当前实例。 this 适用于一些特殊的场合。 例:

40、 public class MyDate int day, month, year ; public void born() Birthday bd = new Birthday(this) ; ,面向对象编程,78,this 例,class Leaf private int i = 0; Leaf increment() i+; return this; void print() System.out.println(“i = “ + i); public class a public static void main(String args) Leaf x = new Leaf(); x.

41、increment().increment().increment().print(); ,面向对象编程,79,Java中的多态,多态: 同一程序中同名的不同方法共存 可以通过子类对父类方法的覆盖实现多态 可以利用重载(overload)在同一个类中定义多个同名的方法 多态情况下进行方法调用时,如何区分这些同名的不同方法 不同类中的同名方法:冠以类名以示区别 同类中的同名方法:用不同的参数列表(参数的个数, 类型, 顺序的不同)来区别同名的不同方法,面向对象编程,80,多态,例:Shapes.java 三个类Circle、Square、Triangle均有draw( )方法和erase( )方

42、法,但不同类的方法的具体操作其实并不相同,实现了多态。,面向对象编程,81,Overloding方法重载,用同一个名字来表示不同的方法。这些方法同名的原因,是因为它们的最终功能和目的都相同,但由于在完成同一功能时,可能遇到不同的具体情况,所以需要定义含不同的具体内容的方法。 方法名必须相同(是同一类中定义同名方法的情况)。 方法的参数必须不同(同名不同方法是靠不同形式的参数列表来区分,包括形式参数的个数、类型、顺序的不同)。 返回类型可以不同,但不是重载的标志。 利用“重名”现象提高程序的抽象度和简洁性。,面向对象编程,82,方法的重载,例:(相同类型的工作,不同的参数) public voi

43、d println(int i); public void println(float f); public void println(String s); Integer类 String toString(); static String toString(int i); Double 类 String toString(); static String toString(double d);,在一个类中,不可以存在两个只有返回值不同的方法,面向对象编程,83,构造方法(constructor),问题的提出 Java试图在每个对象一诞生时,就给它一确定的状态,但有时这种系统的缺省初值不合适;

44、所以 在创建一个新对象时,需用构造方法完成合法的 初始化,使类内成员的初始化工作不依赖于外界 完成。,面向对象编程,84,构造方法,构造方法是一种特殊的成员方法,在创建每个新的类对象时自动执行,以保证新对象的各成员有合法、确定的数值。 构造方法的名字就是类的名字。 构造方法没有返回类型。 主要用于完成变量的初始化;另外,一个类中可以存在多个构造方法(重载),这些构造方法之间可以互相调用,当一个构造方法调用另一个构造方法时,要使用关键字this,同时这个调用语句应该是整个构造方法的第一条可执行语句。,面向对象编程,85,构造方法,构造方法只能在创建类对象时由系统隐含调用,而不能直接引用; 类对象

45、创建时,利用运算符 new 在内存中开辟专用空间,存放指定的类的实例(即对象),这时会自动执行类的构造方法,初始化新对象的成员变量。,面向对象编程,86,构造方法,实例化对象初始化对象 类名 对象名new 构造方法(); Employee emp = new Employee(); new运算符的参数就是调用类的构造方法,初始化新建的对象。 new运算符为对象分配内存空间,并返回对该对象的一个引用。 当没定义任何构造方法时,系统配一个隐含的构造方法(如:Employee())里面没有内容。 一旦定义了一个构造方法,隐含构造方法失效!,面向对象编程,87,定义构造方法,Employee(Stri

46、ng n,int a,float s) name = n ; if(a=18 ,面向对象编程,88,class Rock Rock(int i) / constructor System.out.println(“Creating Rock number “ + i); public class SimpleConstructor public static void main(String args) for(int i = 0; i 10; i+) new Rock(i); /create instance ,例: SimpleConstructor.java,面向对象编程,89,对象初始

47、化三步曲,当为对象分配内存空间后,首先将属性单元置为: 0 (数值型,字符型) false (逻辑型) null (引用型) 对象建立后,有明确的状态,属性都有值。 执行显式初始化 class a private int x=10; private String s = new String(“first”) ; private MyTime mt = new MyTime() ; 执行构造方法,面向对象编程,90,构造方法的重载,面向对象编程,91,构造方法的重载,D200_Card() /没有参数的构造方法 D200_Card(long cn) /有一个参数的构造方法 cardNumber

48、 = cn; /初始化电话卡号 D200_Card(long cn,int pw )/两个参数的构造方法 cardNumber = cn ; password = pw; /密码 D200_Card(long cn,int pw,double b) cardNumber = cn; /三个参数的构造方法 password = pw; balance = b; /余额 ,面向对象编程,92,构造方法的重载,D200_Card(long cn,int pw,double b,String c) cardNumber = cn; /四个参数的构造方法 password = pw; balance = b; connectNumber = c; /接入号码 调用不

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1