欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第4章类和对象wjzhppt课件.ppt

    • 资源ID:16976647       资源大小:700.50KB        全文页数:70页
    • 资源格式: PPT        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第4章类和对象wjzhppt课件.ppt

    第4章 类和对象wjzh第4章 类和对象n4.1.面向对象的基本概念面向对象的基本概念n4.2 类类n4.3 方法方法n4.4 访问控制符访问控制符n4.5 静态修饰符、静态字段和方法静态修饰符、静态字段和方法4.1.面向对象的基本概念OOD方法提供了抽象数据类型机制,遵循软件设计的三条重要原则,即抽象、信息隐藏和模块化;双重模块化数据对数据的操作信息处理+封装4.1.面向对象的基本概念n4.1.1 抽象v1什么是抽象 抽象就是抽出事物的本质特性而暂时不考虑它们的细节。过程抽象和数据抽象是常用的两种主要抽象手段。 客观世界的对象和操作 计算机算法 解空间 数据 程序员对问题的表达(抽象) 客观世界的算法 结果 客观世界的对象 程序设计的对象和操作 输出数据 问题空间 n2如何用面向对象的方法实现抽象如何用面向对象的方法实现抽象 一个抽象数据类型(Abstract Data Type,ADT)可以分解成4个部分,如图4-2所示。语法和语义构成抽象数据类型ADT的说明,让使用者了解这个抽象数据类型的特征。属性和方法构成ADT的实现,展示这个ADT是怎样做成的。 抽象数据类型 说明 实现 语法 语义 属性 方法 图4-2 抽象数据类型 面向对象的程序设计/概述n面向对象的程序设计思想,是将我们要处理的事物抽象成为具面向对象的程序设计思想,是将我们要处理的事物抽象成为具有状态和行为的对象来处理有状态和行为的对象来处理n具有共同属性的一组对象,在面向对象的程序设计语言中,可具有共同属性的一组对象,在面向对象的程序设计语言中,可以用一个以用一个“模版模版”或者或者“基本原型基本原型”来描述,这就是类来描述,这就是类/class/classn在面向对象的程序设计中,类是我们对客观世界的事物进行抽在面向对象的程序设计中,类是我们对客观世界的事物进行抽象思维活动后得到的象思维活动后得到的“抽象数据类型抽象数据类型”,而对象则是类的实例,而对象则是类的实例n对象的状态用成员变量来表述,行为用成员方法来表述对象的状态用成员变量来表述,行为用成员方法来表述n面向对象的程序设计主要围绕以下几个主要概念面向对象的程序设计主要围绕以下几个主要概念抽象、封装、继承、多态。抽象、封装、继承、多态。n4.1.2 封装封装 将信息隐蔽的过程称为封装。 有两方面的原因促使我们控制对成员的访问。 第一个原因是防止程序员接触他们不该接触的东西通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。 第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。 n4.1.3 对象对象 可将对象想象对象(可将对象想象对象(objectobject)应是应是实际问题域中有意义的个体或概念实体。实际问题域中有意义的个体或概念实体。此外,对象应该具有记忆自身状态的能此外,对象应该具有记忆自身状态的能力。同时对象应该以某种方式与系统发力。同时对象应该以某种方式与系统发生关联,既对象应该与系统中其他有意生关联,既对象应该与系统中其他有意义的对象进行消息传递,并提供外部服义的对象进行消息传递,并提供外部服务。务。 n4.1.3 对象对象l(1) (1) 所有东西都是对象。可将对象想象成一种新型变量;它保所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。存着数据,但可要求它对自身进行操作。 l(2) (2) 程序是一大堆对象的组合;通过消息传递,各对象知道自程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。己该做些什么。 l(3) (3) 每个对象都有自己的存储空间,可容纳其他对象。每个对象都有自己的存储空间,可容纳其他对象。l(4) (4) 每个对象都有一种类型。根据语法,每个对象都是某个每个对象都有一种类型。根据语法,每个对象都是某个“类类”的一个的一个“实例实例”。其中,。其中,“类类”(ClassClass)是是“类型类型”(TypeType)的同义词。一个类最重要的特征就是的同义词。一个类最重要的特征就是“能将什么消息发能将什么消息发给它?给它?”l(5 5)同一类所有对象都能接收相同的消息。)同一类所有对象都能接收相同的消息。 4.2 类 类是现实世界某些对象的共同特征类是现实世界某些对象的共同特征(属性和操作属性和操作)的表示,的表示,对象是类的实例对象是类的实例。类的属性类的属性:就是类的静态属性的简称,指类内包就是类的静态属性的简称,指类内包含的含的 各项数据,如变量或其他类的对象;各项数据,如变量或其他类的对象;类的服务类的服务: 则被称为成员函数或方法。则被称为成员函数或方法。4.2 类 类的基本定义方法如下:修饰符修饰符 class 类名类名 extends 父类父类 implements 接口名接口名 类成员变量声明类成员变量声明 类方法声明类方法声明 类的修饰符用来说明类的特殊性质。 分为三种:访问控制符:public 公共类公共类抽象类说明符:abstract最终类说明符:f inal 接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。 接口是Java语言用来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。n1关于类头关于类头-class class关键字,在它的后面,应跟随新数据类型的名称。(注意不要把class写成Class)。 父类名跟在extends 关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。n1关于类头关于类头-类的修饰符类的修饰符“public”(公共)公共) 意味着后续的定义任何人均可使用。“private”(私有)私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。“protected”(受保护的)受保护的)与“private”相似,只是一个继承的类可访问受保护的成员,但不能访问私有成员。“friendly”(友好的)友好的)若某样东西是“友好的”,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫作“包装访问”)。“n1关于类头关于类头-接口名接口名接口名跟在接口名跟在implements关键字后面,用来关键字后面,用来说明当前类中实现了哪个接口定义的功能说明当前类中实现了哪个接口定义的功能和方法。接口是和方法。接口是Java语言用来实现多重继语言用来实现多重继承的一种特殊机制,我们将在后面详细介承的一种特殊机制,我们将在后面详细介绍它的使用方法。绍它的使用方法。2关于类体关于类体 类体的定义要包括类的具体内容,包括类类体的定义要包括类的具体内容,包括类的属性与方法。的属性与方法。class Java中声明类属性为简单变量的语法如下:中声明类属性为简单变量的语法如下: 修饰符修饰符 变量类型变量类型 变量名变量名 =变量初值变量初值; 变量类型和变量名是声明一个变量必变量类型和变量名是声明一个变量必不可少的部分;变量的类型是简单数据类不可少的部分;变量的类型是简单数据类型,如型,如int、double等。等。2关于类体关于类体-类的属性类的属性2关于类体关于类体-类的方法类的方法Java中声明方法的语法如下:中声明方法的语法如下: 修饰符修饰符 返回值类型返回值类型 方法名方法名(参数参数列表列表)throws 例外名例外名1,例外名,例外名2, 方法体:方法体: 局部变量声明;局部变量声明; 语句序列;语句序列; 类的方法,又称类的方法,又称为成员函数,用为成员函数,用来规定类属性上来规定类属性上的操作,实现类的操作,实现类的内部功能的机的内部功能的机制,同时也是类制,同时也是类与外界进行交互与外界进行交互的重要窗口。的重要窗口。 类中定义的方法通常起到两种作用:一是围绕着类的类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。消息传递等操作。注意:系统调用方法的最大特点:注意:系统调用方法的最大特点:不需要在程序里书写专门的调用不需要在程序里书写专门的调用方法的命令方法的命令 Java语言中定义的方法有两类:语言中定义的方法有两类: 一类是需要程序书写专门的调用命令来调用的方法,一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,例如称为程序调用方法,例如isPfime (); 另一类是运行过程中系统自动调用的方法,称为系统方另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的法,例如我们前面程序中的action()、paint()、init()等。这等。这两类方法的定义和使用原则有很大差异。两类方法的定义和使用原则有很大差异。 2关于类体关于类体-类的方法类的方法4.2.2 用户程序自定义类用户程序自定义类 Java程序员把注意力放在创建称为类的用户程序员把注意力放在创建称为类的用户自定义类型(自定义类型(user-defined type)上,类也称上,类也称为程序员定义的类型(为程序员定义的类型(programmer-defined type),),每个类都含有数据和一组操作数据的每个类都含有数据和一组操作数据的方法,类中的数据部分称为实例变量。用户定方法,类中的数据部分称为实例变量。用户定义类型(即类)的实例称为对象。义类型(即类)的实例称为对象。 下面是一个简单化的下面是一个简单化的EmployeeEmployee类,在编写今后的职工工资类,在编写今后的职工工资系统时,会用到它。系统时,会用到它。class Employee /构造函数构造函数public Employee(String n,double s,int year,int month,int day) name = n; /职工姓名职工姓名 salary = s; /职工工资职工工资 hireDay=new GregorianCalendar(year,month-1,day);/出勤数出勤数/方法方法1public String getName() return name;/更多的方法更多的方法/属性的实例属性的实例private String name;private double salary;private Date hireDay;4.2.3 创建类及类的实例对象创建类及类的实例对象 对象是类的一个实例,类是同种对象的抽象,对象是类的一个实例,类是同种对象的抽象,是创建对象的模板。在程序中创建是创建对象的模板。在程序中创建个对象将在内个对象将在内存中开辟一块空间,其中包括该对象的属性和方法。存中开辟一块空间,其中包括该对象的属性和方法。 我们将分步讲述这个类的实现细节。创建对象使我们将分步讲述这个类的实现细节。创建对象使用关键字运算符用关键字运算符newnew,例如下面的语句将创建例如下面的语句将创建EmployeeEmployee的对象:的对象:【例【例4.14.1】显示三个员工的相关信息】显示三个员工的相关信息4.2.3 创建类及类的实例对象创建类及类的实例对象在程序中我们构造了一个在程序中我们构造了一个EmployeeEmployee数组,并给它赋给三个数组,并给它赋给三个EmployeeEmployee对对象象。关于数组我们将在下一章讲述。关于数组我们将在下一章讲述。 staff0 = staff0 = newnew Employee( Employee(张三张三, 75000,1987, 12, 15);, 75000,1987, 12, 15); staff1 =staff1 = new new Employee(Employee(李四李四, 50000,1989, 10, 1);, 50000,1989, 10, 1); staff2 = staff2 = newnew Employee( Employee(王五王五, 40000,1990, 3, 15);, 40000,1990, 3, 15); 创建对象以某个类为模板,这个类里定义了哪创建对象以某个类为模板,这个类里定义了哪些属性和方法,新建的对象就必然在内存里拥有些属性和方法,新建的对象就必然在内存里拥有相应的属性和方法。相应的属性和方法。 可见,相对于简单数据类型,类就是用户自己可见,相对于简单数据类型,类就是用户自己定义的复杂的抽象数据类型:而相对于简单变量定义的复杂的抽象数据类型:而相对于简单变量,对象就是复杂的既包括数据又包括方法代码的,对象就是复杂的既包括数据又包括方法代码的复杂数据单位。复杂数据单位。类的研究(1)/定义v对一个对一个JavaJava应用程序来说,应用程序来说,mainmain方法是必须的,但并不是在每方法是必须的,但并不是在每个类中都需要它个类中都需要它v定义一个只包含数据的类是不多见的,往往还要定义操作这些定义一个只包含数据的类是不多见的,往往还要定义操作这些数据的方法,这样就可以把类中数据的特定布局结构隐藏起来数据的方法,这样就可以把类中数据的特定布局结构隐藏起来class Box class Box double width; double width; double height; double height; double depth; double depth; 一个简单的类一个简单的类定义一个类,实际上就是定义了定义一个类,实际上就是定义了一种新的数据类型一种新的数据类型 这个例子里,新的数据类型叫这个例子里,新的数据类型叫BoxBox类的研究(2)/使用BoxmyVol is 3000.0myVol is 3000.0hisVol is 162.0hisVol is 162.0class Box double width;double height;double depth;class Box double width;double height;double depth;class BoxDemo class BoxDemo public static void main(String s) public static void main(String s) Box myBox = new Box(); Box myBox = new Box(); Box hisBox = new Box(); Box hisBox = new Box(); double myVol, hisVol; double myVol, hisVol; myBox.width=10; myBox.height=20; myBox.depth=15; myBox.width=10; myBox.height=20; myBox.depth=15; hisBox.width=3; hisBox.height=6; hisBox.depth=9; hisBox.width=3; hisBox.height=6; hisBox.depth=9; myVol=myBox.width myVol=myBox.width* *myBox.heightmyBox.height* *myBox.depth;myBox.depth; hisVol=hisBox.width hisVol=hisBox.width* *hisBox.heighthisBox.height* *hisBox.depth;hisBox.depth; System.out.println(“myVol is ” + myVol); System.out.println(“myVol is ” + myVol); System.out.println(“hisVol is ” + hisVol); System.out.println(“hisVol is ” + hisVol); 用用.运算符运算符操作对象的成员操作对象的成员用用newnew来创建类来创建类的对象的对象不同对象的成员变不同对象的成员变量是相互独立的量是相互独立的接收者的数据类型与返回类型相兼容接收者的数据类型与返回类型相兼容BoxBox这个这个classclass应该有计应该有计算自己体积的能力算自己体积的能力返回数据的类型与方法返回数据的类型与方法指定的类型相兼容指定的类型相兼容类的研究(3)/向类中添加方法myVol is 3000.0myVol is 3000.0hisVol is 162.0hisVol is 162.0用不用用不用.运运算符算符class Box double width;double height;double depth;class Box double width;double height;double depth;double volume()return widthdouble volume()return width* *heightheight* *depth;depth; class BoxDemo2 class BoxDemo2 public static void main(String s) public static void main(String s) Box myBox = new Box(); Box hisBox = new Box(); Box myBox = new Box(); Box hisBox = new Box(); double myVol, hisVol;double myVol, hisVol; myBox.width=10; myBox.height=20; myBox.depth=15; myBox.width=10; myBox.height=20; myBox.depth=15; hisBox.width=3; hisBox.height=6; hisBox.depth=9; hisBox.width=3; hisBox.height=6; hisBox.depth=9; myVol = myBox.volume();myVol = myBox.volume(); hisVol = hisBox.volume(); hisVol = hisBox.volume(); System.out.println(“myVol is ” + myVol); System.out.println(“myVol is ” + myVol); System.out.println(“hisVol is ” + hisVol); System.out.println(“hisVol is ” + hisVol); 从发生调用处开始,控制转到方法体,方法执行结束从发生调用处开始,控制转到方法体,方法执行结束或遇到或遇到returnreturn语句时,控制返回到发生调用处语句时,控制返回到发生调用处补充(1)/方法的调用class Box double width;double height;double depth;class Box double width;double height;double depth;double volume()return widthdouble volume()return width* *heightheight* *depth;depth; void setDim(double w, double h, double d)void setDim(double w, double h, double d) width = w; height = h; depth = d; width = w; height = h; depth = d;class methodCallDemo class methodCallDemo public static void main(String s) public static void main(String s) Box theBox = new Box(); Box theBox = new Box(); double theVol; double theVol; theBox.setDim(10,20,15);theBox.setDim(10,20,15); theVol = theBox.volume();theVol = theBox.volume(); System.out.println(“Box System.out.println(“Box的体积是的体积是” ” + theVol);+ theVol); System.out.println(“Box System.out.println(“Box的体积是的体积是 ” ” + + theBox.volume()theBox.volume();); 只要将方法的名只要将方法的名字写出来,并且字写出来,并且给出正确的输入给出正确的输入参数,就发生了参数,就发生了方法调用方法调用只要将方法的名只要将方法的名字写出来,并且字写出来,并且给出正确的输入给出正确的输入参数,就发生了参数,就发生了方法调用方法调用补充(2)/为什么要创建对象?在写程序时,是否要创建对象,要创建哪个类在写程序时,是否要创建对象,要创建哪个类/class/class的的对象,是对象,是根据根据处理问题的处理问题的需要需要来决定的来决定的创建一个类创建一个类/class/class的对象就是为了能够的对象就是为了能够使用使用在这个类里在这个类里已经已经预定义预定义好了的成员变量和成员方法好了的成员变量和成员方法例如例如我们在程序中要处理一个字符串,我们就会想到可能需要创建我们在程序中要处理一个字符串,我们就会想到可能需要创建StringString这个类的对象,或者需要创建这个类的对象,或者需要创建StringBufferStringBuffer这个类的对象这个类的对象而如果我们正在去处理一个有关盒子体积大小的问题,那也许我而如果我们正在去处理一个有关盒子体积大小的问题,那也许我们就应该要创建一个们就应该要创建一个BoxBox class class的对象了的对象了可以直接用,不要我们再去写!可以直接用,不要我们再去写! 所有这些在所有这些在JavaJava里里预定义的类,构成了预定义的类,构成了JavaJava处理问题的强大功能!处理问题的强大功能!补充(3)/创建对象时发生了什么?以以StringBuffer classStringBuffer class为例为例如果我们在一段程序中使用了下列语句之一如果我们在一段程序中使用了下列语句之一系统就会为我们创建一个系统就会为我们创建一个StringBufferStringBuffer的对象的对象StringBuffer sb = new StringBuffer();StringBuffer sb = new StringBuffer();StringBuffer sb = new StringBuffer(32);StringBuffer sb = new StringBuffer(32);StringBuffer sb = new StringBuffer(“StringBuffer sb = new StringBuffer(“明月几时有,把酒问青明月几时有,把酒问青天天”););对象名对象名sbsb可以是可以是任何合法的任何合法的JavaJava标识符标识符w系统会去申请一块系统会去申请一块3232位的内存给变量位的内存给变量sbsb用用w系统再去申请一块内存给这个对象用,其大小要能够放得下系统再去申请一块内存给这个对象用,其大小要能够放得下StringBufferStringBuffer的所有的所有4040个成员方法和个成员方法和3 3个构造方法,再加上一个构造方法,再加上一块用于管理的空间和备用空间块用于管理的空间和备用空间w将给对象用的这块内存的首地址放到将给对象用的这块内存的首地址放到sbsb中中w将所有类成员的实体依次拷贝到给对象用的这块内存中将所有类成员的实体依次拷贝到给对象用的这块内存中w初始化这个新对象初始化这个新对象sbsb,如果使用第三个构造方法,就用,如果使用第三个构造方法,就用“明明月几时有,把酒问青天月几时有,把酒问青天”来初始化来初始化sbsb系统怎样为我们创建系统怎样为我们创建这个对象呢?这个对象呢?sbsb的内容成为的内容成为“明月几时有明月几时有”sbsb的内容不变的内容不变s s被赋值被赋值“把酒问青天把酒问青天”补充(4)/创建对象后我们能做什么?如果我们创建了一个如果我们创建了一个StringBufferStringBuffer的对象的对象sbsbStringBuffer sb = new StringBuffer(“StringBuffer sb = new StringBuffer(“明月几时有,把酒问青明月几时有,把酒问青天天”););我们能用这个对象做什么呢?我们能用这个对象做什么呢?我们就可以使用这个对象所具有的方法和属性了我们就可以使用这个对象所具有的方法和属性了在这个例子里就是可以用在这个例子里就是可以用sbsb里包含的方法来处理字符串里包含的方法来处理字符串“明月几明月几时有,把酒问青天时有,把酒问青天”了了例如我们可以这样做:例如我们可以这样做:String s = sb.substring(6);String s = sb.substring(6);我们也可以这样做:我们也可以这样做:sb.delete(5,11);sb.delete(5,11);可以不要取子串方法前面的赋值部分,可以不要取子串方法前面的赋值部分,而只写成而只写成 sb.substring(6); sb.substring(6); 吗?吗?语法有错误吗?结果是什么?语法有错误吗?结果是什么?补充(5)/我们不能做什么?假设我们创建了一个假设我们创建了一个StringBufferStringBuffer的对象的对象sbsbStringBuffer sb=new StringBuffer(“StringBuffer sb=new StringBuffer(“明月几时有明月几时有,把酒问青天把酒问青天”););这个对象里没有的方法和属性,我们不能用!这个对象里没有的方法和属性,我们不能用!比如我们不可以这样做:比如我们不可以这样做: String s = sb.StringBuffer();String s = sb.StringBuffer();这是因为两个类里都有这是因为两个类里都有charAt(int index)charAt(int index)方法方法StringBufferStringBuffer这个类里没有这样定义的方法这个类里没有这样定义的方法不能把在其它类中定义的方法和属性,拿给这个不能把在其它类中定义的方法和属性,拿给这个类的对象用!类的对象用!我们也不可以这样做:我们也不可以这样做:String s = “String s = “明月几时有明月几时有”;s.append(“,s.append(“,把酒问青天把酒问青天”););appendappend是是StringBufferStringBuffer类的方法,类的方法,而不是而不是StringString这个类的方法这个类的方法我们不能我们不能! !也许有人说也许有人说StringString有个有个charAt(int index),charAt(int index),在在StringBufferStringBuffer的对的对象里也照样用:象里也照样用:char c = s.charAt(1); char c = s.charAt(1); 也可以也可以 char c = sb.charAt(1);char c = sb.charAt(1);Box sb1 = new Box();Box sb1 = new Box();Box sb2 = new Box();Box sb2 = new Box();仅复制对象的仅复制对象的引用,引用,并不复并不复制对象的实体制对象的实体补充(6)/对象与它的引用当我们创建一个对象时,如前所述,它由两部分组成当我们创建一个对象时,如前所述,它由两部分组成w对象的实体对象的实体w对象的引用对象的引用以以BoxBox类为例,这是它的一个对象在内存中的映像类为例,这是它的一个对象在内存中的映像执行指令:执行指令:Box sb2 = sb1;Box sb2 = sb1;sb1depthheight对象的引用对象的引用Box对象对象widthsb2sb1sb2sb1depthBox对象对象height对象的引用对象的引用又一个又一个widthdepth对象的引用对象的引用 heightdepthBox对象对象widthheight对象的引用对象的引用Box对象对象width哪个对?哪个对?? ?4.2.4 构造函数构造函数n1构造函数的一般概念构造函数的一般概念n2创建自己的构造函数创建自己的构造函数n3构造函数的作用构造函数的作用面向对象的程序设计/构造方法(1)什么是构造方法什么是构造方法构造方法构造方法(constructor)(constructor)是一类特殊的方法,从功能上是一类特殊的方法,从功能上讲,它是用来对新创建的对象进行讲,它是用来对新创建的对象进行初始化初始化的,从形式上的,从形式上来讲,它有以下特点来讲,它有以下特点w它与类同名它与类同名w它没有任何返回值它没有任何返回值1.1.除了上述两点外,在语法结构上与一般的方法相同除了上述两点外,在语法结构上与一般的方法相同class Aclass A A() A() / /初始化代码初始化代码 / /其它代码其它代码 JavaJava要求程序中每个变量在使用前都要要求程序中每个变量在使用前都要先初始化,包括新创建的对象先初始化,包括新创建的对象在我们使用在我们使用newnew关键字来创建一个类的对关键字来创建一个类的对象时,类的一个构造方法会自动被调用,象时,类的一个构造方法会自动被调用,来完成初始化这个新对象的任务。来完成初始化这个新对象的任务。面向对象的程序设计/构造方法(2)从一个例子来看构造方法从一个例子来看构造方法我们重写我们重写Box classBox class使它带有自己的构造方法使它带有自己的构造方法class Box class Box Box()Box() width=10; width=10; height = 10; height = 10; depth = 10; depth = 10; System.out.println(“Box System.out.println(“Box的构造方法被调用了!的构造方法被调用了!”);); double volume() return widthdouble volume() return width* *heightheight* *depth; depth; double width; double height; double depth; double width; double height; double depth; 这一句是为了让我们能看到构造方法被这一句是为了让我们能看到构造方法被调用的事实,除此以外没有任何意义。调用的事实,除此以外没有任何意义。实际上,构造方法里是不会有与输入实际上,构造方法里是不会有与输入/ /输输出有关的代码的出有关的代码的两次创建两次创建BoxBox的对象,所以的对象,所以构造方法被调用了两次构造方法被调用了两次面向对象的程序设计/构造方法(3)使用带有自己的构造方法的使用带有自己的构造方法的Box classBox classclass BoxConstructorDemo class BoxConstructorDemo public static void main(String s) public static void main(String s) Box myBox = new Box(); Box myBox = new Box(); Box hisBox = new Box(); Box hisBox = new Box(); myVol =myBox.volume(); myVol =myBox.volume(); hisVol = hisBox.volume(); hisVol = hisBox.volume(); System.out.println(“myVol is ” + myVol); System.out.println(“myVol is ” + myVol); System.out.println(“hisVol is ” + hisVol); System.out.println(“hisVol is ” + hisVol); BoxBox的构造方法被调用了的构造方法被调用了! !BoxBox的构造方法被调用了的构造方法被调用了! !myVol is 1000.0myVol is 1000.0hisVol is 1000.0hisVol is 1000.0因为值是在构造方法里设定因为值是在构造方法里设定的,所以得到相同的结果的,所以得到相同的结果在在JavaJava里,如果一个类没有明显的表明哪一里,如果一个类没有明显的表明哪一个类是它的父类,个类是它的父类,ObjectObject类就是它的父类类就是它的父类面向对象的程序设计/构造方法(4)现在我们知道了为什么创建一个对象时,总是写:现在我们知道了为什么创建一个对象时,总是写:StringBuffer sb = StringBuffer sb = new StringBuffer()new StringBuffer(); ;Box b = Box b = new Box()new Box(); ;原来原来newnew在调用类的构造方法在调用类的构造方法如果如果JavaJava在一个类里找不到构造方法,它就为这个类添写一个默在一个类里找不到构造方法,它就为这个类添写一个默认构造方法,假设类名是认构造方法,假设类名是X Xclass X class X X()super();X()super(); 哎,不对吧?我设计的哎,不对吧?我设计的类里没有构造方法呀类里没有构造方法呀? ?哎,这个类哎,这个类没有父类呀没有父类呀调父类的那个没有参数的构造方法调父类的那个没有参数的构造方法面向对象的程序设计/构造方法(5)前面一个前面一个BoxBox类有个构造方法类有个构造方法Box()Box(),好象不是太有用,因为,好象不是太有用,因为它会把所有它会把所有BoxBox的尺寸都设成一样大的尺寸都设成一样大我们能不能为我们能不能为BoxBox添加一个更有用的构造方法呢添加一个更有用的构造方法呢class Box class Box Box() width=10; height = 10; depth = 10;Box() width=10; height = 10; depth = 10; System.out.println(“ System.out.println(“BoxBox的无参数构造方法被调用了!的无参数构造方法被调用了!”); ); Box(double w, double h, double d) Box(double w, double h, double d) width = w; height = h; depth = d; width = w; height = h; depth = d; System.out.println(“ System.out.println(“BoxBox的有参数构造方法被调用了!的有参数构造方法被调用了!”); ); double volume() return widthdouble volume() return width* *heightheight*

    注意事项

    本文(第4章类和对象wjzhppt课件.ppt)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开