版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 类与对象3.1.1 面向对象术语 1对象3.1.1 面向对象术语 2类 类被称为模板或者蓝本。对象就是由这些模板或者蓝本产生的。3.1.1 面向对象术语 3继承3.1.1 面向对象术语4接口接口可以描述为类定义的模板3.1.1 面向对象术语 5封装3.1.2 面向对象程序设计方法的优点3.1.2 面向对象程序设计方法的优点 1可重用性3.1.2 面向对象程序设计方法的优点 2可扩展性3.1.2 面向对象程序设计方法的优点 3易于管理和维护3.2 面向对象与uml建模 所以在构建软件的过程中,系统建模是非常关键的步骤,所以oop也与建模紧密地结合在一起。3.2.1 为什么需要建模 建模是
2、一项经过检验并被广为接受的工程技术。建立房屋和大厦的建筑模型,能帮助用户得到实际建筑物的印象,甚至可以建立数学模型来分析大风或地震对建筑物造成的影响。3.2.2 uml建模语言uml就是统一建模语言(unified modeling language),是由omg组织(object management group,对象管理组织)在1997年发布的。uml的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。uml提出了一套it专业人员期待多年的统一的标准建模符号。通过使用uml,这些人员能够阅读和交流系统架构和设计规划就像建筑工人多年来所使用的建筑设计图一样。3.2.3 um
3、l的面向对象分析设计 运用uml进行面向对象的系统分析设计,其过程通常由以下3个部份组成。 1识别系统的用例和角色 2进行系统分析,并抽取类 3系统设计,并设计类及其行为3.3 java语言与面向对象特性 java是完全面向对象的语言。 类是java程序中最基本的单元。3.4 类的定义和对象的创建3.4.1 类的基本结构 类是构造对象的模板或蓝图。 可以通过类声明来定义类,然后使用类来创建用户需要的对象。3.4.2 类之间的关系 在面向对象思想中,类之间存在以下几种常见的关系。 1“uses-a”关系 “若类a的方法操纵了类b(对象)的成员,则称之为类a“uses-a”(用到了)类b。 2“h
4、as-a”关系 “has-a”关系是一种拥有关系,若类a中有b类型的成员引用变量,则类a“has-a”(拥有)类b。 3“is-a”关系 若类a是类b子类的一种,则可以说类a“is-a”(是一种)类b3.4.3 构造函数 在创建对象时,对象的成员可以由构造函数方法进行初始化。 构造函数是一种特殊的方法,它具有和它所在的类完全一样的名字。 一旦定义好一个构造函数,创建对象时就会自动调用它。 构造函数没有返回类型,这是因为一个类的构造函数的返回值的类型就是这个类本身。3.4.4 类成员 定义了类之后,就可以在类体中声明两种类的成员,成员变量与成员方法。 1成员变量的使用 成员变量就是类的属性,类定
5、义中的属性指定了一个对象区别于其他对象的值。 2成员变量的初始值 每当创建一个对象后,如果对象有成员变量,则系统会自动为其分配一个初始值,3.4.5 对象的创建有了类就可以利用其来创建对象了,在java中创建对象很简单,只要使用new关键字即可。如下代码创建了student类的对象。student s = new student();由类创建对象的过程称为实例化,每个对象是类的一个实例,说明了类与对象的不同之处。学生类是对什么是学生做定义,而王强、李勇和马跃是对象,是学生类的实例。 3.5 方 法 在java中,对对象的操作由方法来完成。要使一个对象完成某些工作,就要调用其相应的方法。 方法实
6、际上描述的是一个行为,一种功能3.5.1 方法的定义 方法的基本组成包括:方法的声明以及方法体,基本语法如下。 返回值类型 方法名(参数序列) 方法体 3.5.2 方法的重载 方法重载是指在同一个类里面,有两个或两个以上具有相同名称,不同参数序列的方法。 例如,三角型类可以定义多个名称为area的计算面积的方法,有的接收底和高做参数,有的接收3条边做参数。 1方法重载的规则 2重载方法的匹配3.5.3 递归 递归的方式分为2种:直接递归和间接递归3.6 静 态 成 员 使用static关键字把成员声明为静态成员。静态变量也叫类变量,非静态变量叫实例变量 静态成员最主要的特点是它不属于任何一个类
7、的对象,它不保存在任意一个对象的内存空间中,而是保存在类的公共区域中。 所以任何一个对象都可以直接访问该类的静态成员,都能获得相同的数据值。修改时,也在类的公共区域修改。3.6.1 静态方法和静态变量 通常情况下,方法必须通过它的类对象访问。 在方法的声明前面加上static即可。使用static关键字的方法即静态方法。 如果一个方法被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。 但是在静态方法中,不能以任何方式引用this或super。3.6.2 静态变量和常量在java中没有一个直接的修饰符来实现常量,而是通过静态成员变量的方式来实现的,如下代码说明了
8、这个问题。1/声明3个常量x、y、z2public static final int x=10;3static public final int y=20;4final static public int z=40;static表示属于类,不必创建对象就可以使用,因为常量应该不依赖于任何对象,final表示值不能改变。一般用作常量的静态成员变量访问权限都设置为public,因为常量应该允许所有类或对象访问。 3.6.3 静态成员的访问可以使用“.”的语法调用静态成员变量。3.6.4 main()方法 程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如
9、方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。 因为main()方法是由java虚拟机调用的,所以必须为public,虚拟机调用main()方法的时候不需要产生任何对象,所以main方法声明为static,且不需要返回值,所以声明为void 所以最终格式如下所示。 public static void main(string args) 3.6.5 factory方法 java的静态方法有一种常见的用途,就是使用factory方法产生不同风格的对象 factory方法就相当于创建实例对象的new,我们经常要根据类clas
10、s生成实例对象,如a a=new a() ,factory method也是用来创建实例对象的3.7 包 使用包的目的之一就是可以在同一个项目中使用名称相同的类 假如两个开发人员不约而同地建立了两个相同名字的类,只要将其放置在不同的包中,就不会产生冲突。3.7.1 包的定义 要想将类放入指定的包中,就必须使用package语句,语法如下。 package ; package语句必须放在源文件的最前面 java.lang,这就表示此源文件中的类在java包下的lang子包中3.7.2 类的导入 当一个类要使用与自己处在同一个包中的类时,直接访问即可。 若要使用其他包中的类就必须使用import语
11、句,基本语法如下。 import .*; import .类名;3.7.3 静态导入 从java se 5.0开始,导入语句不但可以导入类,还具有导入静态方法和静态成员变量的功能,不过需要在关键字“import”和包名之间添加关键字“static”,语法如下。 import static .*; import static .;3.8 成员的访问控制 成员的访问是指以下两种不同的操作。 一个类中的方法代码是否能够访问(调用)另一个类中的成员。 一个类是否能够继承其父类的成员。3.8.1 公共类型:public 公共类型使用public关键字来进行修饰,当一个成员被声明为public时,所有其他
12、类,无论该类属于哪个包,均能够访问该成员。 对于继承而言,规则为如果父类的成员声明为public,那么无论这两个类是否在同一个包中,该子类都能继承其父类的该成员。3.8.2 私有类型:private 标识为私有类型的成员用private关键字修饰,其不能被该成员所在类之外的任何类中的代码访问。 对于继承而言,规则为如果父类的成员声明为private,子类在任何情况下都不能继承该成员。3.8.3 默认类型:default 具有此访问权限的成员,只对与此成员所属类在同一个包中的类是可见的。 也就是说,对同一个包中的类,默认类型相当于public 而对包外的类则相当于private。下面的两段代码说
13、明了默认类型的使用。3.8.4 保护类型:protected当访问该成员的类位于同一包内,则该类型成员的访问权限相当于public类型。只是有一点区别,若访问该成员的类位于包外,则只有通过继承才能访问该成员。3.9 封 装就是把东西包装起来。换言之,成员变量和方法的定义都包装于类定义之中。通过限定类成员的可见性,可以使类成员中的某些属性和方法能够不被程序的其他部分访问,它们被隐藏了起来,只能在定义的类中使用,这就是面向对象中实现封装的方式。用访问限制修饰符保护成员变量,通常是private。建立公有的访问方法,强制调用代码通过这些方法访问成员变量。3.10 利用系统已有的类 java类库中提供
14、的几个常用的处理日期时间的类。 通过对这几个类的介绍,使读者了解利用系统已有的类的思想。3.10.1 date类在标准java类库中包含一个date类,其对象用来描述一个时间点,如“september 22,2007,23:59:59 gmt”。 import java.util.date; date类要使用其对象. date d1=new date(); /表示当前系统时间的对象。 date d2=new date(106,11,8); /表示1900+106年,11月,8日,过时 system.out.println(new date(); date d2=new date(60000);
15、 /从1970年1月1日以来经历多少毫秒。 date d1=new date(); date d2=new date(60000); system.out.println(d1.after(d2);/true system.out.println(d1.before(d2);/false3.10.2 gregoriancalendar类 使用当前时间构造一个默认的对象 new gregoriancalendar()。 gregoriancalendar cal=new gregoriancalendar(); system.out.println(cal);java.util.gregoria
16、ncalendartime=1285743032156,arefieldsset=true,areallfieldsset=true,lenient=true,zone=sun.util.calendar.zoneinfoid=asia/shanghai,offset=28800000,dstsavings=0,usedaylight=false,transitions=19,lastrule=null,firstdayofweek=1,minimaldaysinfirstweek=1,era=1,year=2010,month=8,week_of_year=40,week_of_month=
17、5,day_of_month=29,day_of_year=272,day_of_week=4,day_of_week_in_month=5,am_pm=1,hour=2,hour_of_day=14,minute=50,second=32,millisecond=156,zone_offset=28800000,dst_offset=0 gregoriancalendargregoriancalendar(int year, int month, int dayofmonth) gregoriancalendargregoriancalendar(int year, int month, i
18、nt dayofmonth, int hourofday, int minute) gregoriancalendar cal=new gregoriancalendar(1978,8,8); 1978年9月8日 addadd(int field, int amount)/为给定的日历字段添加或减去指定的时间量 public int getget(int field) /返回给定日历字段的值 setset(int field, int value) /将给定的日历字段设置为给定值。 setset(int year, int month, int date) /设置日历字段 year、month
19、 和 day_of_month 的值。 setset(int year, int month, int date, int hourofday, int minute) /设置日历字段 year、month、day_of_month、hour_of_day 和 minute 的值。 settimesettime(date date) /使用给定的 date 设置此 calendar 的时间。 date date gettimegettime() / 返回一个表示此 calendar 时间值例子3-32package chapter03.sample3_32;import java.util.*
20、;public class sample3_32 public static void main(string args) / 创建当前日历对象gregoriancalendar now = new gregoriancalendar();/ 从当前时期对象中取出时间日期对象date date = now.gettime();/ 将时间日期对象按字符串形式打印system.out.println(date.tostring();/ 重新将时间对象设置到日期对象中now.settime(date);/ 从当前日期对象中取出当前月份、日期int today = now.get(calendar.day_of_month);int month = now.get(calendar.month);/ 设置日期为本月开始日期now.set(cal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度电商合伙合同协议书模板3篇
- 2024年度知识产权侵权责任担保合同
- 《系统详细设计》课件
- 2024年度商用电梯金融服务与租赁合同
- 《电梯维保合同模板》
- 2024中国电信集团财务限公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信山东济宁分公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国核工业二三建设限公司社会招聘100人易考易错模拟试题(共500题)试卷后附参考答案
- 《铁路伤亡事故案例》课件
- 2024中国信科集团·武汉光迅科技股份限公司春招易考易错模拟试题(共500题)试卷后附参考答案
- 二手房屋买卖物品交接清单
- 家畜育种新技术
- 小学生汽车发展史新能源课件
- 王贵启-玉米田杂草发生发展及除草剂优解-合肥0728
- 常见心理问题的识别培训课件
- 幼儿园幼小衔接实施方案(修改)
- 大学摄影教程-课件第一章
- 2023北京海淀区八上初二期末数学试卷及答案
- 浙江重症医学专科护士理论考核试卷与答案
- 沟槽土方开挖工程专项施工方案范文
- 住宅质量通病防治手册=防渗漏篇
评论
0/150
提交评论