1、第6章抽象封装与类第六章 抽象、封装与类主要内容 一、抽象与封装 二、Java 的类 三、对象的创建与使用 四、参数传递 五、匿名对象1、抽象v 抽象内涵 去除掉对象中与主旨无关的次要部分,或是暂时不予考虑的部分 抽取出与研究工作有关的实质性的内容加以考察v 软件开发方法中所使用的抽象类型 (1)过程抽象 (2)数据抽象(1)过程抽象v 将整个系统功能划分为若干部分,强调功能完成的过程和步骤 面向过程的软件开发方法采用的就是这种抽象方法 使用过程抽象有利于控制、降低整个程序的复杂度 缺点:这种方法本身自由度较大,难于规范化和标准化,操作起来有一定难度,在质量上不易保证(2)数据抽象2、封装v
2、利用抽象数据类型将数据和操作封装在一起 数据被保护在抽象数据类型的内部 系统其他部分只能通过被授权操作与抽象数据交互v 在面向对象程序设计中 抽象数据类型通过“类”来代表 每个类都封装相关的数据和操作v 在实际开发过程中 类常用来构建系统内部的模块 封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互 使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误 保证程序中数据的完整性和安全性主要内容 一、抽象与封装 二、Java 的类 三、对象的创建与使用 四、参数传递 五、匿名对象二. Java的类 1. Java 类概念 2. 类的定
3、义与修饰 3. 域 4. 方法1、Java类概念v 类(Class)和对象(Object)是面向对象程序设计方法中最核心的概念。 类是对某一类事物的描述(共性),是抽象的、概念上的定义; 对象则是实际存在的属该类事物的具体的个体(个性),因而也称为实例(Instance) 。1、Java类概念v 类是Java程序的基本组成要素 封装了一类对象的状态和方法,是该类对象的原型v Java程序设计就是定义类的过程 Java程序中定义的类的数目和功能都是有限的 编程时还需要用到大量系统定义好的类,即Java类库中的类1、Java类概念v 类的构成:类头+类体v 类体由数据成员(属性、域)与函数成员封装
4、而成。 Java语言把数据成员称为域变量、属性、成员变量等; 把函数成员称为成员方法,简称为成员方法。v 举例:圆柱体类。二. Java的类 1. Java 类概念 2. 类的定义与修饰 3. 域 4. 方法(1)定义类v 定义类(声明类) 实际是定义类的静态属性和动态属性(方法)。用户定义一个类实际上就是定义一个新的抽象数据类型。v 必须先定义类,然后才可利用所定义的类来声明相应的变量,并创建对象。(1)定义类v 定义类的语法结构(1)定义类实例v 实例:圆柱体类的定义(2)类的修饰符v Java程序在定义类时,可在class之前增加若干类的修饰符,修饰限定所定义的类的特性v 类的修饰符分为
5、访问控制符和非访问控制符两大类,有些类的修饰符也可以用来修饰类中的域或方法v 本节讨论类的非访问控制符(2)类的修饰符abstractv 抽象类是没有具体对象的概念类v 抽象类不能直接被实例化,一般作为其它类的超类v 举例 假设“鸟”是一个类,它可以派生出若干个子类如“鸽子”、“燕子”、“麻雀”、“天鹅”等 问题:那么是否存在一只实实在在的鸟,它既不是鸽子,也不是燕子或麻雀,它不是任何一种具体种类的鸟,而仅仅是一只抽象的“鸟”呢?(2)类的修饰符abstractv 抽象类是其所有子类的公共属性的集合 使用该特性可提高程序开发和维护效率v 以“鸟”的概念为例 假设需要向别人描述“天鹅”是什么,通
6、常都会这样说:“天鹅是一种脖子长长,姿态优美的候鸟” 可见定义是建立在已知道什么是“鸟”的前提之上 只有在被进一步问及“鸟”是什么时,才会具体解释说:“鸟是一种长着翅膀和羽毛的卵生动物” 而不会在一开始就把“天鹅”描述成“是一种脖子长长,姿态优美,长着翅膀和羽毛的卵生动物”(2)类的修饰符abstract举例v 已有两个类Circle和Rectangle,完成相关参数计算(2)类的修饰符abstract举例v 问题 假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积 直截了当的做法是将它们分别放到两个数组中,用两个循环,加上一个加法,这种做法不是最理想的 如果还有其它
7、形状,triangle, ellipses等 上述方法显得“累赘” 我们希望有一种统一的表示,例如用一个数组shape ,接受所有的形状,然后用 for(i=0; i 使用 - 销毁,对象完成工作后,将被销毁,所占用的资源将被系统回收。2、对象的使用v 通过对象来引用对象成员的格式如下: 对象名.对象成员 如,volu.radius = 2.8; volu.height = 5;v 如果引用的是成员方法,只要在成员方法名的圆括号内提供所需参数即可,如果方法不需要参数,则用空括号。 如:volu.area()v 一个类多个对象,它们的成员变量分配在不同的内存,因此修改某一对象的成员变量时其他不受
8、影响。2、对象的使用v App6_1.java2、对象的使用v App6_1.java3、在类定义内调用方法v 方法调用 场景一:方法在类定义的外部被调用,在类声明之外用到成员名称时需指明对象; ; 场景二:在类定义内部,方法之间可以相互调用,若在类内部使用类自己的成员时不必指明对象名 举例:3、在类定义内调用方法v 在同一个类的定义里面,某一方法可以直接调用本类的其他方法而不需加对象名。v 若要强调是“对象本身的成员”的话,则可以在成员名前加this关键字,即“this.成员名”。此时this即代表调用此成员的对象。例如:主要内容 一、抽象与封装 二、Java 的类 三、对象的创建与使用 四
9、、参数传递 五、匿名对象四. 参数传递 1、以变量为参数调用方法 2、以数组作为参数或返回值的方法调用1、以变量为参数调用方法v 调用方法并传递参数时,参数其实就是方法的自变量,所以参数要放在方法的括号内来进行传递。 括号内的参数可以是数值型、字符串型,甚至是对象。 方法的参数属于局部变量。1、以变量为参数调用方法举例1v App6_4.java1、以变量为参数调用方法v 若在通过方法调用,将外部传入的参数赋值给类的成员变量,方法的形式参数与类的成员变量同名时, 如何处理?1、以变量为参数调用方法举例2四. 参数传递 1、以变量为参数调用方法 2、以数组作为参数或返回值的方法调用方法的参数传递
10、与返回v 调用对象方法时,要传递参数 在传递参数时,Java 是值传递,即,在调用一个方法时,将表达式的值复制给形式参数 对于引用型变量,传递的值是引用值(可以理解为内存地址),因此方法中对数据的操作可以改变对象的属性v 方法的返回 返回基本类型 返回引用类型,就可以存取对象实体(1)以数组为参数调用方法v 当参数是基本数据类型时,采用传值方式调用;当参数是引用型的变量时,则是传址方式调用。v 传递数组 指明参数是一个数组,实参只给出数组名v 返回值为数组类型的方法。若返回一个一维整型数组,则方法前加int。(1)以数组为参数调用方法v App6_5.java:以一维数组为参数的方法调用,求若
11、干数的最小值。 (2)返回值为数组类型的方法v 将一个矩阵转置后输出。 主要内容 一、抽象与封装 二、Java 的类 三、对象的创建与使用 四、参数传递 五、匿名对象五、匿名对象v 以当一个对象被创建之后,在调用该对象的方法时,也可以不定义对象的引用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象。v 例如: Cylinder volu=new Cylinder(); volu.SetCylinder(2.5, 5,3.14); 若改写为: new Cylinder().SetCylinder(2.5, 5,3.14); 则Cylinder()就是匿名对象。五、匿名对象v 使用匿名对象的
12、两种情况: 如果一个对象只需要进行一次方法调用; 将匿名对象做为实参传递给一个方法调用。v 例:一个程序中有一个getSomeOne方法要接收一个MyClass类对象作为参数,方法的定义如下:Public static void getSomeOne(MyClass c)v 可以用下面的语句调用这个方法。 getSomeOne (new MyClass() );主要内容 一、抽象与封装 二、Java 的类 三、对象的创建与使用 四、参数传递 五、匿名对象编程题v 找出4*5矩阵中值最小和最大的元素,并分别输出其值及所在的行号和列号。编程题v 产生0100之间8个随机整数,并利用冒泡排序法将其升
13、序排序后输出。v 思想:每次比较相邻的数,若次序不对,交换次序。冒泡排序实例编程题v 产生0100之间8个随机整数,并利用冒泡排序法将其升序排序后输出。v 思想:每次比较相邻的数,若次序不对,交换次序。编程题v 从键盘输入一个字符串和一个字符,从该字符串中删除给定的字符。编程题v 编程统计用户从键盘输入的字符串中所包含的字母、数字和其他字符的个数。编程题v 将用户从键盘输入的每行数据都显示输出,直到输入“exit”字符串,程序运行结束拓展:成员变量与局部变量v 成员变量:在类中定义的变量v 局部变量:在方法中定义的变量v 区别: 从语法形式看 成员变量属于类,局部变量是指方法中定义的变量或者参数; 成员变量可以被访问修饰符、static等修饰,而局部变量则不能被他们所修饰; 共同点:都可以被final修饰拓展:成员变量与局部变量v 成员变量:在类中定义的变量v 局部变量:在方法中定义的变量v 区别: 从在内存中的存储
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2