面向对象基础(2)

上传人:l**** 文档编号:47049353 上传时间:2018-06-29 格式:PDF 页数:61 大小:1.37MB
返回 下载 相关 举报
面向对象基础(2)_第1页
第1页 / 共61页
面向对象基础(2)_第2页
第2页 / 共61页
面向对象基础(2)_第3页
第3页 / 共61页
面向对象基础(2)_第4页
第4页 / 共61页
面向对象基础(2)_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《面向对象基础(2)》由会员分享,可在线阅读,更多相关《面向对象基础(2)(61页珍藏版)》请在金锄头文库上搜索。

1、第第四四章章 面向对象基础面向对象基础 Java程序设计 http:/ 余余 烨烨 本章学习提示本章学习提示 本章我们主要学习面向对象编程的基本概念。 了解类与对象的概念及面向对象编程的思想 访问控制符的使用 this、static 和 final 的使用 内部类的概念 引引 例例 举例:大象装进冰箱 面向过程 打开冰箱、存储大象、关上冰箱 面向过程的思想,强调的是过程(动作) 面向对象 抽象类:冰箱、大象 冰箱动作:打开、存储、关上 目目 录录 类类 或者 类名类名 对象变量;对象变量; 对象变量对象变量 = new 类名类名(参数参数1,参数,参数2,); People people =

2、 new People ( id, name); People people = new People(); Practice - 类的定义类的定义 定义一个People类,包括: 两个成员变量:姓名,住址 构造方法,用于设置两个成员属性的初值 成员方法 setInfo ,供外部调用,改变两个成员属性的值 成员方法 showName,供外部调用,返回“姓名”的值 实例化一个People类的对象,并打印其姓名 Example4_01 class People People() People(String strName, String strAdd) name = strName; addres

3、s = strAdd; void setInfo(String strName, String strAdd) name = strName; address = strAdd; String showName() return name; String name; String address; class TestPrint public static void main(String args) People p1 = new People(“George”, “New York”); System.out.println( p1.showName() ); 名词解释名词解释 成员变量

4、成员变量是类的一个组成部分,一般是基本数据 类型,也可以是引用类型 如何访问(使用)对象的成员变量 对象名.变量名 成员方法 = 函数 作用: 对该类内的变量进行各种操作; 与其它类的对象进行信息交流,作为类与外部进行交 互通信的接口 构造方法构造方法 构造方法是一个类方法中方法名与类名相同的类方 法,它的作用作用是当使用new关键字关键字创建一个对象时 ,自动调用并对新建对象进行初始化操作 语法格式: 修饰符构造方法(构造器)名称 (形参列表) 初始化语句; 说明: 修饰符可以省略,也可以是public、protected、private其中 之一 构造方法名称必须和类名相同 形参列表和定义

5、方法形参列表的格式完全相同 构造方法的特点构造方法的特点 构造方法没有返回值,不定义返回类型 构造方法不能定义返回值类型声明,也不能使用void定义构 造方法没有返回值。如果为构造方法定义返回值类型,或使用 void定义构造方法没有返回值,编译时不会出错,但java会把 这个所谓的构造方法当成成员方法来处理 构造方法可以重载,针对参数数量和类型定义多个同名构造 方法 构造方法可以继承,子类可以继承父类的构造方法 构造方法不能由编程人员显式地直接调用,它是在对象创建 时由new运算符运算符自动调用的 构造方法只用来对类实例进行初始化,目的在于简化初始化 操作 构造方法构造方法 每个类都至少有一个

6、构造方法每个类都至少有一个构造方法,类中可以不定义构造方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法。 默认构造方法的名字与类名相同,它的参数列表和方法体均为空,自动将所有实例变量初始化为默认值默认值 (数值型为0,布尔型为false,字符型为u0000 (a),对象型为null ). 但是一旦定义了自己的构造方法,默认构造方法将不再起作用. 利用利用javap查看类里的方法:查看类里的方法:javap 类名类名 OOP语言语言 面向对象程序设计(OOP Object-Oriented Programming) 是现今程序设计的主流和流行趋势。在面向对象的 程序设

7、计中,将所有事物都作为对象对象来处理. 面向对象编程与面向过程编程的区别: 过程化程序设计先确定算法,再确定数据结构;面向 对象编程先确定数据结构,再确定运算; 面向过程编程的程序员,习惯于建立数据结构存放数 据并定义方法(函数)来操作数据;面向对象编程的 程序员则构造一个对象模型,将数据与方法组织在一 起; 例子例子 编写一个驾驶汽车的方法 面向过程的程序设计: 编写一个方法,driveCar(); 面向对象的程序设计: 将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void drive(),用Car这个类实例化一个具体的对象Car,调用:car.dr

8、ive()。 OOP语言语言 OOP的基本思想基本思想是把人们对现实世界的认识过程应用到程序设计中。把现实世界的事物抽象成对象,它有两个特征:状态状态(state)和行为行为(behavior) 软件的对象概念是由现实世界对象抽象而来。把现实世界对象的状态保存在软件对象的变量状态保存在软件对象的变量中,现实世界对象的行为通过软件对象的方法(函数)来实行为通过软件对象的方法(函数)来实现现。 类与对象的概念类与对象的概念 把相似的对象划归成一个类。 类是对象的“模板”,对象是类的实例. 类与对象之间的关系可以看成是抽象与具体的关系。 其中类是抽象的,对象是具体的 类描述了对象的属性和行为 对象是

9、类的一个实例 比如,当设计灯泡的时候要求每一个灯泡都必须具 有型号这个属性,同时还要能够进行打开、关闭等 操作 因此当把灯泡这些共同的属性和行为集中起来的时候 就抽象出一个灯泡类 每一个具有这些属性和行为的,具体的灯泡就是这个 灯泡类的对象或者称为实例 面向对象程序设计方法面向对象程序设计方法 面向对象程序设计方法是: 对象对象 = (算法(算法 + 数据结构)数据结构) 程序程序 = (对象(对象 + 对象对象 + ) 算法与数据结构是一个整体,算法离不开数 据结构,算法只能适用于特定的数据结构。 面向对象中,算法与数据结构被捆绑成一个 类 设计方法设计方法:先设计类;然后根据类创建对象 案

10、例分析案例分析 足球联盟(League)中有很多球员(Player)。联盟 会为每年的3个赛季(Season)组队,每队由15个队员 组成。队员在每个赛季中的得分会被记录下来,各队 之间的每场比赛、他们的最终分数、各队输赢的比赛 次数都会被记录下来。 请用面向对象的思想来分析这个案例,设计其中可 能存在的类,并设计该类的成员变量和方法。 18 作品一作品一 19 作品二作品二 20 21 Player类类 属性:属性: String name; /姓名姓名 float height; /身高身高 String teamName;/属于哪个球队属于哪个球队 String gameNames; /

11、参加过的比赛名称参加过的比赛名称 int scores; /每次比赛中的得分每次比赛中的得分 方法:方法: public Player(); /无参构造方法无参构造方法 /有参构造方法有参构造方法 pulbic Player(String name, float height); /设置球员信息设置球员信息 void setInfo(String name, float height); /换球队换球队 void changeTeam(String newTeamName); 22 创建一个球员对象创建一个球员对象 最有名的球员 Ronaldo 1.86 皇家马德里 球员球员A 修改 Mess

12、i 1.69 请问修改之后会出现什么问题? 对球员A有什么影响? 问题:问题: 目目 录录 类类 /颜色颜色 int id; /标识号标识号 方法:方法: void setInfo(String color, int id); / 设置或更改信息设置或更改信息 分分 析析定义定义 pNo1 26 栈 堆 用AndroidDoll声明一个对象变量(局部变量)pNo1: AndroidDoll pNo1; 内存模型 在栈中为pNo1对象分配一块内存空间,用来存储一 个内存地址 尚未为pNo1对象真正分配内存空间 分分 析析初始化初始化 对变量进行初始化 pNo1 = new AndroidDoll

13、(); 内存模型 在堆中为“pNo1”对象分配一块内存空间,内存 的大小视其成员变量的情况而定。 27 栈 堆 pNo1 0 0x034009 4个字节 存放地址存放地址 String是对象 类型 0x034009 Reference 引用引用 分分 析析赋值赋值 对对象进行赋值 pNo1.setInfo(“yellow”, 35); 内存模型 对于基本数据类型的成员变量,将值存储在内存中 ;对于对象类型的成员变量,需要再次分配空间存 储其值 28 栈 堆 pNo1 0 0x034009 0x034009 35 yellow 0x035109 0x035109 分分 析析对象数组对象数组 定义

14、一个AndroidDolll类型的数组 AndroidDoll pDoll; 初始化数组的大小为2; pDoll = new AndroidDoll2; 为数组中的每个对象初始化 pDoll0 = new AndroidDoll(); pDoll1 = new AndroidDoll(); 为每个对象赋值 pDoll0.setInfo(“green”, 24); pDoll0.setInfo(“red”, 30); 29 数组是对象 类型 分分 析析对象数组对象数组 30 栈 堆 pDoll 0x034009 0x034009 0 0 数组定义 数组初始化 数组中每个元 素初始化 赋值 0x0

15、55009 0x055009 0x065009 0x065009 green 24 0x077009 0x077009 red 0x088009 0x088009 30 小小 结结 对于对象类型的局部变量,仅在栈内存中存 储对象所在的内存地址(memory address)( 这个内存地址被称为是对对象的引用reference ),而真正的对象则存储在堆内存中。 对于对象类型的成员变量,需要在堆内存中 开辟两块存储区域,一种用来存放变量的内 存地址,一块用来存放赋值后变量的值。 31 32 创建一个球员对象创建一个球员对象 最有名的球员 Ronaldo 1.86 皇家马德里 球员球员A 修改 Messi 1.89 问题一:问题一: Player huangA; /创建皇家马德里球队球员创建皇家马德里球队球员A huangA = new Player(); /初始化初始化 pMostFamous.setInfo(“Ronaldo”, 1.86); /设置对象信息设置对象信息 Player pMost

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号