对象与类java基础第6章.ppt

上传人:牧羊曲112 文档编号:6274291 上传时间:2023-10-12 格式:PPT 页数:46 大小:590KB
返回 下载 相关 举报
对象与类java基础第6章.ppt_第1页
第1页 / 共46页
对象与类java基础第6章.ppt_第2页
第2页 / 共46页
对象与类java基础第6章.ppt_第3页
第3页 / 共46页
对象与类java基础第6章.ppt_第4页
第4页 / 共46页
对象与类java基础第6章.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《对象与类java基础第6章.ppt》由会员分享,可在线阅读,更多相关《对象与类java基础第6章.ppt(46页珍藏版)》请在三一办公上搜索。

1、对象与类,本章目标,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,面向对象,举例说明把大象放冰箱面向过程关心怎么做,即具体的实现步骤、实现细节第一步把冰箱门开开、第二步把大象装冰箱、第三步把冰箱门带上面向对象关心这个步骤涉及几个对象,每个对象都能做什么。至于怎么做封装在类内部的方法中(方法是面向过程的,由类设计者关心),使用者是不用关心细节的,只关心做什么即可。需求涉及大象和冰箱,要把大象放冰箱。面向对象好处使用者不用关心任务的实现细节,便于理解和使用,同时提高了程序的可读性、可维护性、可重用性,便于大型软件的开发,解决了面向过程开发引起的软件危机。,面向对象

2、的设计思想,面向对象的基本思想是,从现实世界中客观存在的事物(对象)出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式(对象和对象之间是有关系的)面向对象更加强调运用人类在日常的思维逻辑中经常采用的思想方法与原则,如抽象、分类、继承、聚合、多态等,对象和类的概念,对象:是用计算机语言对现实世界中客观存在的具体事物的描述,对象通过“属性”和“操作”来分别对应该事物所具有的“属性”和“行为”。万物皆对象类:是具有相同属性和相同操作的对象的集合,类中定义了这一类对象应该具有的属性和行为,它是对象的抽象。类可以看成一类对象的模板,是一个概念。对象是类的一个具体实例,是具体的实现。,类图简

3、介,使用类图描述类用于分析和设计“类”直观、容易理解,“+”:public“-”:private,类名,返回值类型,类型,属性名,参数:名字:类型,名字:类型,方法名,对象和类,类之间的关系,类之间的关系包括:关联、泛化、依赖、实现关联关系又有两个特例:组合和聚合,类(对象)之间的关系1,关联关系(has a)客观世界中的两个具体事物存在着千丝万缕的联系,所以我们把两个事物抽象到软件系统中时,两个类(对象)必然也存在一些联系,这种联系在面向对象编程中叫做关联关系关联有方向性如果一个类单方向地访问另一个类,则被称为单向关联;如果两个类都可以互相访问,则称为双向关联单向关联用 类A类B表示,表示类

4、A能访问类B双向关联用 符号表示关联具有多重性1:1、1:N、M:N,类(对象)之间的关系1,关联包括两个特例聚合表示整体和部分的关系,但部分可以属于多个整体聚合用空心菱形表示,空心菱形一端表示整体组合表示整体和部分的关系,但该部分只能属于一个整体组合用实心菱形表示,实心菱形一端表示整体,类(对象)之间的关系2,泛化(继承)关系(is-a)一般和特殊的关系子类 is-a 特殊的父类,类(对象)之间的关系4,依赖关系如果类B的改动会导致类A的改动,则类A依赖于类B。和关联关系比,依赖关系表述的两者之间的关系比较弱,常表现为局部变量、方法参数、静态方法调用。,类(对象)之间的关系3,实现关系现实世

5、界中可以定义一组规范(属性、行为),并对规范进行具体实现,比如计算机主板上的USB接口就是一种规范,不同厂商的鼠标实现这种规范才能够使用,同样软件系统中也有这种关系,叫做实现关系。,内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,使用现有类,Java API提供了一些现成的类供我们使用,我们可以使用这些现有类来创建实例(对象),比如StringObject包装类Integer、Long集合类等等使用现有类创建对象类名 对象引用变量名=new 类名();String s1=new String(“Hello,World”);Object o=new Ob

6、ject();,内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,类的定义,除了使用现有API提供的类库,我们也可以自定义类之前我们说过类是具有相同属性和相同行为的对象集合,属性就是成员变量,行为就是方法,所以类的定义主要有两方面组成成员变量方法格式class 类名/成员变量定义;/方法定义;约定俗称的命名规则类名的首字母大写变量名和方法名的首字母小写采用骆驼命名标识,类的定义,成员变量定义修饰符 type 属性名=默认值;private/public int id=123;可分为实例变量和类变量(也叫静态变量)实例变量隶属于对象本身,不用static修

7、饰,每个对象拥有自己独立的实例变量类变量隶属于类,用static修饰,该类的所有对象共用方法定义修饰符 修饰符 返回值 方法名(参数列表)代码块;public int getId()return id;,演示示例1:Person类定义,封装,为什么使用对于属性信息隐蔽,安全例如学生的性别不能修改,不能让用户访问学生对象的性别属性,这时使用private访问控制修饰符修饰sex变量,把sex变量封装到类的内部,只有类的内部可以访问对于方法对外提供接口,屏蔽内部实现细节,便于理解和使用如果用户想查看学生对象的性别,这时需要该类提供一个对外的public方法,通过方法进行访问,该方法叫做getter

8、方法如果是其他允许修改的属性,可提供另一个访问对其进行修改,该方法叫setter方法良好的封装使用private对属性进行封装,从而保护信息的安全;使用public修饰方法,使方法可以让外界调用封装怎么用把属性私有化,提供一对共有的方法(getter/setter)访问私有属性。,课堂练习1:Student,训练要点:掌握类的定义方式掌握类的基本组成(成员变量、方法)需求说明定义一个学生类成员变量【学号sno,姓名name,年龄age】方法【对每个属性的存取方法】,对象的创建,使用new关键字创建对象格式类名 对象的引用变量=new 类名();举例说明Person p1=new Person(

9、);同一个类的每个对象有不同的存储空间Person p2=new Person();,栈,堆,p1,*,person对象,id,name,0,null,p2,*,person对象,id,name,0,null,对象的使用,访问对象的成员变量对象(引用).成员变量名使用封装以后就没有该调用方式了。调用对象的方法对象(引用).方法名(参数列表)同一类的每个对象共享该类的方法,演示示例2:对象的创建和使用,课堂练习2:Student,训练要点:掌握使用new关键字创建对象掌握如何访问对象的属性、和调用对象的方法需求说明通过setter/getter方法设置自己的学号、姓名、年龄,然后打印出来通过访问

10、属性的方式设置自己的学号、姓名、年龄,然后打印出来(实际工作中不推荐用这种方式,违反封装性),自定义方法,Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式修饰符1,返回值类型 方法名(形参列表)代码块;形式参数:在方法被调用时用于接收外界输入的数据实参:调用方法时实际传给方法的数据返回值:方法在执行完毕后返还给调用它的环境的数据返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回值类型 voidJava语言中使用下述形式调用方法:对象名.方法名(实参列表)实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配return语句终止方法的运行并指定要

11、返回的数据注意:Java中进行函数调用中传递参数时,遵循按值传递的原则,实质就是二进制位的对拷,基本类型变量的二进制位是该数据的表示方式;引用类型变量的二进制是地址,是得到对象的方式,而不是对象本身,内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,构造函数,构造函数(构造方法、构造器)定义在Java类中,用来初始化对象的成员变量的一个函数构造函数与类同名且没有返回值(不写void)例如,Person类的构造函数public Person(int id,String name)this.id=id;this.name=name;创建对象时,使用Perso

12、n p1=new Person(1,”zhangsan”);调用构造函数初始化对象构造函数不写返回值实质其实构造函数是有返回值的,返回的是刚刚被初始化完成的当前对象的引用。既然构造函数返回被初始化的对象的引用,为什么不写返回值类型呢?比如Person类构造器为什么不写成 public Person Person(参数列表)呢?因为java的设计人员把这种带返回值、并且函数名和类名相同的函数看成一个普通方法,只是名称“碰巧”和类名相同罢了,编译器识别时也会认为它是一个方法;为了和普通方法进行区别,java设计人员规定构造函数不写返回值并且与类名同名,编译器通过这一规定识别构造函数,而不是说构造函

13、数真的没有返回值,this指针,构造函数中this是什么指向当前对象的指针如果this用在构造函数中,表示当前构造函数正在初始化的对象,例如public Person(int id,String name)this.id=id;this.name=name;如果this用在方法中,表示当前正在调用该方法的对象,例如public void setId(int id)this.id=id;,默认构造函数,当程序员没有显示指定构造函数时,编译器会为类自动添加一个默认的(缺省的)构造函数(即不带参数的构造函数),以便用来初始化对象,缺省的构造函数格式如下public 类名()super();/该句可以

14、省略如果程序员提供了一个带参数的构造函数,那么编译器就不会自动增加默认的构造函数了,如果创建对象时使用了默认的构造函数,则该构造函数必须由程序员显示的进行添加,演示示例3:构造函数的定义,对象初始化块,类似构造函数,也是用来初始化对象的成员变量的,是类里面可以定义的第四种成员(前三种依次是成员变量、方法和构造函数)格式class 类名()初始化块;,对象初始化块,构造函数已经能初始化对象了为什么还要有初始化块啊?初始化块初始化对象的时期优先于构造函数,所以当多个构造函数拥有同样的初始化语句时,可以把该语句统一提到初始化块中定义,以免相同的初始化语句分散到各个构造函数中引起代码重复、凌乱,演示示

15、例4:初始化块的定义,对象初始化过程,之前学过使用new关键字可以创建并初始化对象,那么当我们创建并初始化对象时,具体的初始化过程是怎样的呢?其实当我们使用new关键字创建并初始化对象时,初始化对象总共分为三步给对象的实例变量分配空间,默认初始化基本类型默认初始化为0或0.0引用类型默认初始化为null成员变量声明时初始化、初始化块初始化按从上到下定义的顺序构造函数初始化,对象初始化内存模型,举例说明通过示例5来分析一下对象初始化过程中对象的内存模型当调用Person p2=new Person(789,“wangwu”);时内存模型如下页所示,演示示例5:对象初始化过程,对象初始化第一步,给

16、对象的实例变量分配空间、默认初始化,堆,id,name,0,null,p2,*,栈,person对象,对象初始化第二步,成员变量声明时初始化、初始化块初始化注意初始化顺序按从上到下的定义顺序本例中先声明时初始化、后初始化块初始化如果调换两者位置,结果会发生变化(讲师授课时注意演示),堆,id,name,123 456,*,p2,*,栈,person对象,zhangsan,lisi,对象初始化第三步,构造函数初始化,堆,id,name,789,*,p2,*,栈,person对象,wangwu,课堂练习3:Student,训练要点:掌握构造函数的定义方式掌握在构造函数中、方法中this指针的使用方

17、式理解默认构造函数的概念,理解显示的定义了构造函数以后编译器不会再提供默认构造函数理解初始化块的概念和使用方式理解对象初始化的三个步骤以及对应的内存模型需求说明利用Student类练习,内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,重载,方法名称相同、参数不同的方法之间叫做重载,其中参数不同包括以下三种情况参数的数量不同参数的类型不同参数的顺序不同仅返回值不同的方法不叫重载方法为什么只有返回值不同的方法不叫重载其实重载的方法之间并没有任何关系,只是“碰巧”名称相同罢了,既然方法名称相同,在使用相同的名称调用方法时,编译器怎么确定调用哪个方法呢?就是靠

18、传入参数的不同确定调用哪个方法(因为我们知道返回值是运行时才决定的,而重载方法的调用是编译时就决定的),所以当编译器只能靠参数来区分方法,不能通过返回值。构造函数也可以重载,演示示例6:方法与构造函数的重载,课堂练习4:Student,训练要点:掌握方法和构造函数重载掌握只有返回值不同的方法不叫重载以及原理需求说明给Student类添加info方法,该方法的作用是打印学生信息,可以根据传入参数的不同打印,例如分别传入学号、姓名、年龄等信息,或对三者信息的组合传入,内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,static,static修饰符可以用于修

19、饰类的成员变量和方法修饰成员变量时,该变量称为类变量或静态变量,隶属于类,类的所有对象共享同一个静态变量修饰方法时,该方法称为类方法或静态方法,静态方法可以直接使用 类名.方法名()调用,也可以使用创建对象后通过对象引用名.方法()的方式调用注意:静态方法不能访问非静态成员(实例变量、实例方法)也可以有静态块,演示示例7:static的使用,课堂练习5:Student,训练要点:掌握静态变量、静态方法的定义和使用理解同一个类的所有对象共用一份static变量理解静态方法不能访问非静态成员需求说明使用计数器num统计创建Student对象的个数(提示构造函数里对num进行自加操作),内容进度,类和对象的概念使用现有类自定义类型对象的内存模型方法的重载static单例模式,单例模式,设计模式对同一种问题的固定解决方式单例就是只创建一个对象使用场景仅需要创建一个对象的时候定义步骤使用private修饰构造函数提供静态方法得到唯一对象,演示示例8:单例模式,小结,分析需求,用封装方式设计类,画出类图汽车销售人员销售汽车,可售款式有凯越、君威每款汽车有款式和编号,款式、编号不能修改汽车销售人员有姓名,姓名不能修改销售人员有两种销售方式:按车辆销售,每次一辆按车型销售(凯越),要同时告诉销售人员购买数量,凯越,君威,销售员,谢谢!,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号