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

上传人(卖家):三亚风情 文档编号:3476021 上传时间:2022-09-04 格式:PPT 页数:159 大小:599.56KB
下载 相关 举报
面向对象程序设计方案概述.ppt_第1页
第1页 / 共159页
面向对象程序设计方案概述.ppt_第2页
第2页 / 共159页
面向对象程序设计方案概述.ppt_第3页
第3页 / 共159页
面向对象程序设计方案概述.ppt_第4页
第4页 / 共159页
面向对象程序设计方案概述.ppt_第5页
第5页 / 共159页
点击查看更多>>
资源描述

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

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

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

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

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

6、术。对象取决于人的观点(模块化,应用)4从“名词”开始确定系统中的对象。对象可以是:简单的和复杂的:衬衣,银行 实际的和概念的:银行出纳员,银行帐号3 3面向对象编程11对象的属性和方法4确定对象的属性和方法4对象属性:可以是数据或对象。客户客户号,客户名,地址 定单定单号,定货条目,顾客号(也可以是顾客对象)。4对象方法:让对象做的事情(可以对自己,也可以对其他对象),经常影响对象属性。客户提交定单 定单打印定单,改变条目3 3面向对象编程12模型化对象CustomerCustomerIDnamebillingAddressshipping Addressphoneinitialize()p

7、laceOrder()OrderorderIDCustomerdateOrdereditemsOrderedpaymentplacedByinitialize()calcAmountOwed()printOrder()makePayment()changeItem()3 3面向对象编程13测试对象4与问题域是否有关、适当?4是否独立存在 客户可以独立存在。定单可以,但在使用时必须有客户配合。4是否有属性和方法。3 3面向对象编程14对象与类4类(Class)是同种对象的集合与抽象4类是对象的抽象及描述,它是具有统一属性和方法的多个对象的统一描述体,是用来定义一组对象共有属性和方法的模板。4类是

8、用来创建对象实例的样板,它包含所创建对象的状态描述和方法的定义。类是一个型,而对象则是这个型的一个实例。4类是静态概念,而对象则是一个动态概念,因为只有在运行时才给对象分配空间,对象才真正存在。3 3面向对象编程15对象是类的唯一性实例现实世界 实体抽象数据类型 计算机世界对象 类抽象映射 计算机逻辑的实现实例化抽象概念世界3 3面向对象编程16接口与实现4类是一种封装技术。4如果属性或方法被定义为public,它就是接口的一部分,其他类可以直接访问它。4如果属性或方法被定义为private,它就是实现的一部分。只有类自己的方法可以访问它。4对象要注意保护自己的数据(私有属性,公有方法)。对象

9、通过它们的方法管理,实现由编程人员控制。4通过接口与对象发生作用,内部实现不影响接口(汽车,内部变化不影响驾驶)程序一部分变化不会影响其他部分。4复用 事先写好的操作可在整个项目中使用 重用比重写更容易3 3面向对象编程17对象与类几种相互关系4包含关系 当对象A是对象B的属性时,我们称对象B包含对象A。4关联关系 当对象A的引用是对象B的属性时,我们称对象A和对象B之间是关联关系。4类之间的继承关系 B类继承了A类,就是继承了A类的属性和方法。A类称之为父类,B类称之为子类。3 3面向对象编程18为什么要学习面向对象编程4面向对象技术的意义 人脑与电脑的思维 如何解决软件危机4学习面向对象的

10、紧迫性 现在已经到了如果不了解面向 对象编程,作为一个程序员就抬 不起头来的时候了。3 3面向对象编程19面向对象技术意义4目前的计算机功能很强,但目前的计算机并不很合理。最大的不合理是来自人认识问题时的认识空间和计算机处理问题时的方法空间的不 一致,人与目前的计算机之间仍存在着较大的隔阂。而面向对象技术有助于减小这一隔阂、并使这两个空间尽量趋于一致。4软件复用 类库的使用(可重用的标准化的模块)类的继承4面向对象技术应用的普遍性3 3面向对象编程20面向对象技术-人人受益4for manager 更迅速和更经济地开发和维护软件系统。4for analysts and designers 模块

11、化的过程将变的简单,并能获得一个清晰的、易于管理的设计方案。4for programmers 清晰的对象模型,丰富的面向对象开发工具及类库使得编程变为一件饶有兴趣的工作。程序员明显感到编程效率的提高。面向对象程序设计基础3 3面向对象编程22主要内容4 抽象4 封装4 继承4 多态4 类定义4 重载4 包4 接口3 3面向对象编程23OOP的主要特点4抽象去除对象中与主旨无关的次要部分,而 仅仅抽取出与研究有关的内容(数据抽象)3 3面向对象编程24抽象4在软件开发方法中使用的抽象有两类:过程抽象和数据抽象 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤 数据抽象把系统中需要

12、处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型包含了数据,也包含了针对这些数据的授权操作。面向对象的软件开发采用数据抽象的方法来构建程序的类、对象和方法。3 3面向对象编程25抽象4所有编程语言都提供“抽象”功能。4你所能解决问题的复杂程度取决于抽象的种类和质量。4汇编语言对于计算机(机器语言)是一步很小的抽象。4过程化语言(高级语言)相对于汇编语言的抽象迈了一大步。但你所考虑的仍然是机器的结构而非问题的结构。4面向对象方法为程序员提供了一种表示问题空间元素的全新的方法,且不受问题类型的约束。3 3面向对象编程26抽象4问题空间元素

13、方法空间中的表示:对象4“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。4面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素。4面向对象语言更加贴近人的思维方式。OOP允许你用问题空间中的术语来描述问题。3 3面向对象编程27OOP的主要特点4封装(encapsulation)实现了信息的隐藏及安全性 提高了程序的模块化,且易于维护3 3面向对象编程28封装-信息隐藏4封装 是一种组织软件的方法。其基本思想是把客观世界中联系紧密的元素及相关操作组织在一起,使其相互关系隐藏在内部,而对外仅仅表现为与其他封装体间的接口。从而构造出具有独立含义的软件实现。4封装并不是一个新

14、的概念,但在面向对象的程序设计中提出了一种全新的封装方法 类3 3面向对象编程29封装-信息隐藏4封装 就是利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能与这些抽象数据类型交流和交互。4在面向对象的程序设计中,抽象数据类型是用“类”来代表的。3 3面向对象编程30封装-信息隐藏4每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统内部的模块。4由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了

15、效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。3 3面向对象编程31封装-软件复用4封装使得对象:对内成为一个结构完整、可自我管理、自 我平衡、高度集中的整体。对外则是一个功能明确、接口单一、可在 各种合适的环境下都能独立工作的有机的 单元。4类的封装特性使得类可重用性大为提高,这样的有机单元特别适宜构建大型标准化的应用软件系统,可以大幅度地提高生产效率。3 3面向对象编程32OOP的主要特点4继承(inheritance)体现了对现实世界的抽象模拟 提高了代码的复用性交通工具车船飞机汽车火车父类/超类(superclass)子类(subclass)Java仅支持单重继

16、承,但可通过接口实现多重继承3 3面向对象编程33OOP的主要特点4多态(polymorphism)用同一个名字调用实现不同操作的方法 方式1:不同的类之间的同名方法 如:中国人/日本人/美国人 说话 方式2:参数不同的同名方法 使用方便,且降低了维护和编程量3 3面向对象编程34Java中的类4几个概念 类:同种对象的集合与抽象 系统类库中已定义好的类:是系统提供 的已实现的标准类的集合,是Java的API,它可帮助开发者方便、快捷地开发Java程序。用户自定义的类 针对特定问题 子类、父类3 3面向对象编程35Java中的类4Java中的类结构 基类:所有Java的类都派生自Object

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

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

19、ss shape class rectangle extends shape final class roundrect extends rectangle 注意:final可以与abstract一起使用吗?3 3面向对象编程40创建对象4对象(实例instance):以类为模板创建的 具体实例(实际个体)创建某个类的具体对象(类似变量声明)类名 欲创建的对象名new 类名(参数表);例如:String s=new String(“Hello!”);3 3面向对象编程41类的成员变量的声明4声明成员变量(member)的语法修饰符 数据类型 变量名;4引用:对象名.变量名4修饰符 访问控制符

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

21、ed int x;private protected int y;static final float MaxArea=100.0f;3 3面向对象编程44成员变量的声明 class Employee String name;int age;float salary;Employee e=new Employee();e.name=“张立”;e.age=21;e.salary=528.37F;final 类型 常量名=值实例变量成员变量其生命周期与对象存在的时间相同。3 3面向对象编程45类成员变量(静态变量)4静态变量为类的各实例共享的变量。static 静态变量名;4位于类的内存区域中,为

22、该类的各个对象共享.4无此限定符的变量是实例变量。class ex int i;static int j;static final int k=10;-4 final 常量可同时定义为static类exjk=10对象1i :3对象2i :53 3面向对象编程46类成员变量(静态变量)4实现各实例之间的通讯 对于该类的任何一个对象访问该静态变量时,取得的都是相同的值4跟踪创建的实例数 public class Count private int serial;/实例变量 private static int counter=0;/静态变量 public Count()counter+;seria

23、l=counter;4静态变量类似于某些语言中的全局变量3 3面向对象编程47类成员变量(静态变量)4非private 的静态变量无须创建实例就可以从类的外部访问。class StaticVar static int x=100 ;public class test public void m()int m=StaticVar.x;3 3面向对象编程48类成员变量(静态变量)class PhoneCard200 static final String connectNumber=“200”;static double additoryFee;long cardNumber;int passwo

24、rd;boolean connected;double balance;3 3面向对象编程49类成员变量(静态变量)public class a public static void main(String args)PhoneCard200 my200_1=new PhoneCard200();PhoneCard200 my200_2=new PhoneCard200();PhoneCard200.additoryFee=0.1;System.out.println(“第一张200卡的接入号码:”+my200_1.connectNumber);System.out.println(“第二张2

25、00卡的附加费:”+my200_2.additoryFee);System.out.println(“200卡类的附加费:”+PhoneCard200.additoryFee)System.out.println(“200卡接入号码:”+PhoneCard200.connectNumber);3 3面向对象编程50方法的声明4定义对类内成员变量(数据)的操作4方法的声明语法:修饰符 返回类型 方法名(参数列表)throws 例外名 方法体;4方法是类的动态属性,标志了类所具有的功能和操作3 3面向对象编程51类的方法定义规则4方法名后的小括号是方法的标志。4形式参数是方法从调用它的环境输入的数

26、据。4返回值是方法在操作完成后返还给调用它的环境的数据。4要指定方法返回值类型。如没有返回值,类型要写 void4方法名相同,但参数不同,是不同的方法。4与类名相同的所有方法都是类的构造方法。3 3面向对象编程52方法体的定义4在方法中定义的变量称为局部变量。其生命周期:执行进入方法体时建立,退出方法时撤消。局部变量使用之前必须初始化。4在方法体中可以访问所有的类属性,可以调用所有类中定义的方法。4方法可以递归调用。3 3面向对象编程53方法的声明4修饰符(Modifier):访问控制符:public、private、protected、private protected static:静态方

27、法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在方法体中只能使用static变量和static方法 abstract:只有方法头,而没有具体的方法体和操作实现的方法,要在子类中通过重新定义(override)来实现 final:不能被重新定义(override)的方法3 3面向对象编程54访问控制符4访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。4类访问控制符 公共类 :public 类名 一般类(缺省)4一个类被声明为公共类,表明它可以被所有的其他类所访问和引用。程序的其他部分可以创建这个类的对象、访问这个类的内部可见成员变量和调用它的可见方法4

28、一般类只能被同一包中的类访问和引用。4定义在同一个程序中的所有类属于一个包。3 3面向对象编程554一个类作为整体对程序的其他部分可见,并不能代表类内的所有成员变量和方法也同时对程序的其他部分可见,前者只是后者的必要条件 4成员变量和方法的可见性域和方法的访问限定符只限在本类内使用。private可被同包中其他类使用。可 被子类继承(包括位于不同包中的子类)protected公共变量和公共方法,可被任何类使用。public可被同包中其他类使用。无访问限定符3 3面向对象编程56域和方法的访问限定符4为了使对象具有良好的封装性,一般将类的实例变量设计成私有。4为了使其它类或对象能够访问私有实例变

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

30、名,这时,参数在方法体中将隐藏同名的成员变量。class circle int x,y,radius;setCircle(int x,int y,int radius)3 3面向对象编程59值传送与地址传送ABABAB引用类型值传送基本类型值传送地址传送3.143.143.140 x2F0 x2F3 3面向对象编程60参数传递例public class PassTest float m_float;void change1(int pi)pi=100;void change2(String ps)ps=new String(“Right”);void change3(PassTest po)p

31、o.m_float=100.0;public static void main(String args)PassTest pt=new PassTest();3 3面向对象编程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(pt);System.out.println(“Current pt.m_flo

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

33、F;4一旦对象被建立并被初始化,就可以调用该方法打印这个对象的数据。emp.print();4对象emp执行print 方法操作自己的数据。4向对象发消息,让对象做某件事。3 3面向对象编程64方法的声明4例:class shapeprivate int x;static float MaxArea=100.0f;public void setx(int newx)x=newx;public int getx()return x;public static void setMA(float newMA)MaxArea=newMA;3 3面向对象编程65类方法(静态方法)4类方法:static

34、方法名()4使用类方法不用创建类的对象。调用这个方法时,建议使用类名做前缀,而不是使用某一个具体的对象名。4非static的方法是对象方法(或称实例方法)。4类方法中不能访问实例变量,而只能访问类变量(static方法 static域)。4类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。4类方法中没有this值。3 3面向对象编程66类方法(静态方法)public class a public static void main(String args)System.out.println(Math.round(3.54);String s=to_char(2.718);S

35、ystem.out.println(“e=“+s);static String to_char(double x)return Double.toString(x);3 3面向对象编程67类方法(静态方法)4main方法是静态方法,这是为了使系统在没有任何实例化对象之前可以运行一个应用程序。4如果main方法要调用本类的其它方法:将这些方法设计成静态方法 创建对象,使用对象方法。4一个静态方法不能被一个非静态方法所覆盖。3 3面向对象编程68例子:银行业务4要求:处理简单帐户存取款、查询4面向对象的分析分析(OOA)对象模型抽象:银行帐户银行帐户 对象模型分析:余额、存、取、查余额、存、取、查

36、4面向对象的设计设计(OOD)对象模型的实现:类及其成员定义 BankAccount类类 Banlance,etc getBalance(),getMoney(),etc3 3面向对象编程69银行业务的程序结构银行帐户类BankAccount数据:余额、利率操作:查询余额、存款、取款 查询利率、设置利率主类主类UseAccountmain()方法,创建BankAccount类的对象,并完成相应操作UseAccount.java3 3面向对象编程70小结类与对象4面向对象的数据和方法:一个类的对象虽然具有相同的属性,但对象却各不相同(属性值不同)。一个类的对象方法虽然具有相同的代码,但表现不同,

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

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

39、说明而直接使用它们。4this表示的是当前对象本身,更确切地说,this代表了当前对象的一个引用。利用this可以使用当前对象的域,调用当前对象的方法。4super 表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。3 3面向对象编程75方法中使用this class Banana void f(int i).Banana a=new Banana();b=new Banana();a.f(1);b.f(2);4方法如何知道是处理哪个对象?4编译做了一些内部处理 Banana.f(a,1);Banana.f(b,2);4把一个隐含的参数传给了方法指向被操作对象的引用。3 3面向对

40、象编程76this如果你在方法中想拿到这个引用 thisclass 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 3 3面向对象编程77this4this 只能在方法中使用,表示当前对象,或类的当前实例。4this 适用于一些特殊的场合。4例:public class MyDate int day,month,year;public void born()Birt

41、hday bd=new Birthday(this);3 3面向对象编程78this 例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.increment().increment().increment().print();3 3面向对象编程79Java中的多态4多态:同一程序中同名的不同方法共存 可以通过子类对父

42、类方法的覆盖实现多态 可以利用重载(overload)在同一个类中定义多个同名的方法4多态情况下进行方法调用时,如何区分这些同名的不同方法 不同类中的同名方法:冠以类名以示区别 同类中的同名方法:用不同的参数列表(参数的个数,类型,顺序的不同)来区别同名的不同方法3 3面向对象编程80多态4例:Shapes.java 三个类Circle、Square、Triangle均有draw()方法和erase()方法,但不同类的方法的具体操作其实并不相同,实现了多态。draw()erase()draw()erase()draw()erase()3 3面向对象编程81Overloding方法重载4用同一个

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

44、println(String s);4Integer类 String toString();static String toString(int i);4Double 类 String toString();static String toString(double d);在一个类中,不可以存在两个只有返回值不同的方法 3 3面向对象编程83构造方法(constructor)4问题的提出 Java试图在每个对象一诞生时,就给它一确定的状态,但有时这种系统的缺省初值不合适;所以在创建一个新对象时,需用构造方法完成合法的初始化,使类内成员的初始化工作不依赖于外界完成。3 3面向对象编程84构造方法

45、4构造方法是一种特殊的成员方法,在创建每个新的类对象时自动执行,以保证新对象的各成员有合法、确定的数值。4构造方法的名字就是类的名字。4构造方法没有返回类型。4主要用于完成变量的初始化;另外,一个类中可以存在多个构造方法(重载),这些构造方法之间可以互相调用,当一个构造方法调用另一个构造方法时,要使用关键字this,同时这个调用语句应该是整个构造方法的第一条可执行语句。3 3面向对象编程85构造方法4构造方法只能在创建类对象时由系统隐含调用,而不能直接引用;4 类对象创建时,利用运算符 new 在内存中开辟专用空间,存放指定的类的实例(即对象),这时会自动执行类的构造方法,初始化新对象的成员变

46、量。3 3面向对象编程86构造方法4实例化对象初始化对象 类名 对象名new 构造方法();Employee emp=new Employee();4new运算符的参数就是调用类的构造方法,初始化新建的对象。4new运算符为对象分配内存空间,并返回对该对象的一个引用。4当没定义任何构造方法时,系统配一个隐含的构造方法(如:Employee())里面没有内容。4一旦定义了一个构造方法,隐含构造方法失效!3 3面向对象编程87定义构造方法 Employee(String n,int a,float s)name=n;if(a=18&a=60)age=a;else System.out.printl

47、n(illegal age);System.exit(1);salary=s;3 3面向对象编程88class 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=18&a Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich()3 3面向对象编程107构造方法的继承4子类的构造方法定义

48、中,如要调用父类的含参数的构造方法,需用super关键字,且该调用语句必须是子类构造方法的第一个可执行语句。4若子类 的构造方法中没有super()语句,系统将隐含调用父类无参数构造方法。4一构造方法可利用this调用本类其他的构造方法,此时this应是第一个可执行语句3 3面向对象编程108调用父类构造方法4在继承情况下的对象初始化:为对象分配内存并初始化(0、false、null)。如果没有为类中的某些成员赋初始值,Java系统会为类的成员赋固定的初始值(数值变量的值为0,布尔变量的值为false,未初始化的引用为null)。执行每一层的类的显式初始化。执行每一层的类的构造方法(由于显式或

49、隐式调用)。3 3面向对象编程109抽象与抽象类4程序员可以先创建一个定义共有属性和方法的一般类,再从一般类派生出具有特性的新类。4抽象类实际上是所有子类的公共域和公共方法的集合,而每一个子类则是父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸。3 3面向对象编程110类继承树Objectclassabstract class classfinal classclassJava单重继承3 3面向对象编程111抽象类与最终类4abstract 抽象类 没有具体对象的概念类 较高层次的概括 抽象类的作用是让其他类来继承它的抽象化的特征。在程序中不能用抽象类作为模板来创建对象。4final

50、 最终类 该类不能有子类。电话卡类无卡号类有卡号类磁卡IC卡校园201卡IP卡200卡3 3面向对象编程112抽象类与最终类 abstract class PhoneCard class Number_PhoneCard extends PhoneCard final class D200_Card extends Number_PhoneCard .4抽象类经常要包含某些抽象方法(方法的具体实现要在子类中实现)。4final可以与abstract一起使用吗?3 3面向对象编程113抽象方法4abstract 抽象方法 仅有方法头而没有方法体的方法,为该类的子类定义一个方法的接口标准。abst

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(面向对象程序设计方案概述.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|