清华面向对象程序设计第章.ppt
《清华面向对象程序设计第章.ppt》由会员分享,可在线阅读,更多相关《清华面向对象程序设计第章.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章抽象与封装 3.1 抽象与封装的实现技术 实现抽象和封装实现抽象和封装 类和对象类和对象 一个对象包含了若干个成员变量和成员方法,它是现实世一个对象包含了若干个成员变量和成员方法,它是现实世界中特定实体在程序中的具体体现。其中,成员变量反映界中特定实体在程序中的具体体现。其中,成员变量反映实体的属性状态,成员方法反映实体具有的行为能力,这实体的属性状态,成员方法反映实体具有的行为能力,这些内容的规格描述将由类承担,类是对具有类似特征的对些内容的规格描述将由类承担,类是对具有类似特征的对象的抽象说明,对象是类的实例。象的抽象说明,对象是类的实例。对象体的构成绘制直线获取属 性值设置属 性值
2、成员方法3.2 类 3.2.1 3.2.1 类的定义类的定义 JavaJava语言中语言中,类主要有两个来源途径类主要有两个来源途径JavaJava类库类库 用户自定义的类用户自定义的类所有的类都是所有的类都是ObjectObject类的子类。如果在自定义类类的子类。如果在自定义类时,没有写明父类,则默认的父类为时,没有写明父类,则默认的父类为ObjectObject。从严。从严格意义上讲格意义上讲,Java,Java程序中定义的所有类都是子类。程序中定义的所有类都是子类。最简单的类定义格式为 class ClassNameClassBody /类体类体 classclass为关键字,为关键字
3、,ClassNameClassName为定义的类名称为定义的类名称ClassBodyClassBody为类体,包含成员变量、成员方为类体,包含成员变量、成员方法、类、接口、构造方法、静态初始化器法、类、接口、构造方法、静态初始化器 类的UML表示一个类的一个类的UMLUML图形表示如图图形表示如图 一个Box类的UML表示 BOXBOX类的类的UMLUML表示表示Box类的定义 public class Box int long,width,height;void setLong(int longValue)long=longValue;void setWidth(int widthValue
4、)width=widthValue;void setHeight(int heightValue)height=heightValue;void setBox(int longValue,int widthValue,int heightValue)long=longValue;width=widthValue;height=heightValue;int getLong()return long;int getWidth()return width;int getHeight()return height;成员变量和成员方法两种形式成员变量和成员方法两种形式 实例变量和实例方法实例变量和实例
5、方法 每个变量和方法惟一地与一个对象相关联,即每个变量和方法惟一地与一个对象相关联,即在创建某个对象时,同时为每个对象创建所有实例在创建某个对象时,同时为每个对象创建所有实例变量的副本,关联所有的实例方法变量的副本,关联所有的实例方法类变量和类方法类变量和类方法(后续章节)(后续章节)类的嵌套定义类的嵌套定义class OutClass /顶层类顶层类 int conut;class InClass /内部类内部类 void printConut()System.out.println(conut:+(+conut);void createInObject()InClass in=new In
6、Class();/引用内部类引用内部类 in.printConut();类的嵌套定义类的嵌套定义public class TestInClass /用于测试内部类应用的类用于测试内部类应用的类 public static void main(String args)OutClass outObj=new OutClass();/创建外部类对象创建外部类对象 outObj.createInObject();/调用创建内部类的成员方法调用创建内部类的成员方法 OutClass.InClass inObj=outObj.new InClass();/在外在外 部创建内部类对象部创建内部类对象 inO
7、bj.printConut();运行结果:运行结果:conut:1conut:1conut:2conut:2 JAVAJAVA类的存储类的存储有两种存储方式:有两种存储方式:一种是将两个类定义存放在一个文件中一种是将两个类定义存放在一个文件中 另一种是将两个类分别存放在两个不同的文件中另一种是将两个类分别存放在两个不同的文件中不管类定义的源代码是多个类存放在一个文件中,还是不管类定义的源代码是多个类存放在一个文件中,还是一个类存放在一个文件中,编译后都将一个类生成一个一个类存放在一个文件中,编译后都将一个类生成一个字节码文件,且文件名的前缀为类名,后缀为字节码文件,且文件名的前缀为类名,后缀为
8、.class.class 含有属于另外一个类的成员变量的典型例子含有属于另外一个类的成员变量的典型例子 class Date int year,month,day;/描述年、月、日的三个成员变量描述年、月、日的三个成员变量 void setYear(int y)year=y;void setMonth(int m)month=m;void setDay(int d)day=d;void setDate(int y,int m,int d)year=y;month=m;day=d;int getYear()return year;int getMonth()return month;int ge
9、tDay()return day;BookBook类定义类定义class Book /书籍类书籍类 String name;String author;Date publishDate;float price;/其他一些成员变量其他一些成员变量 /成员方法成员方法 DateDate是描述日期的类,是描述日期的类,BookBook是描述书籍的类。在是描述书籍的类。在BookBook类类中,设一个表示出版日期的成员变量,它属于中,设一个表示出版日期的成员变量,它属于DateDate类。类。BookBook类与类与DateDate类关系类关系可以将这两个类看成具有可以将这两个类看成具有“整体整体-部
10、分部分”的关系。即的关系。即BookBook类是由类是由DateDate类对象和一些其他类型的成员变量类对象和一些其他类型的成员变量组合而成的,它们共同地反映了书籍信息。下面是组合而成的,它们共同地反映了书籍信息。下面是这种关系的这种关系的UMLUML图形符号:图形符号:3.2.2 3.2.2 成员变量的定义与初始化成员变量的定义与初始化 实例变量的定义实例变量的定义Modifiers DataType MemberName;Modifiers DataType MemberName;ModifiersModifiers:修饰符修饰符,决定成员变量的存储方式和访问权限决定成员变量的存储方式和访
11、问权限DataType:DataType:成员变量的类型成员变量的类型MemberNameMemberName:是成员变量的名称是成员变量的名称初始化实例变量主要有初始化实例变量主要有5 5个途径个途径q每个数据数据类型有默认的初始值每个数据数据类型有默认的初始值q可以在定义的同时赋予相应的初值可以在定义的同时赋予相应的初值q在一个成员方法中在一个成员方法中,为每个实例变量赋值为每个实例变量赋值q在类的构造方法中实现初始化实例变量在类的构造方法中实现初始化实例变量 q利用初始化块对成员变量进行初始化利用初始化块对成员变量进行初始化 初始化块、构造方法初始化成员变量初始化块、构造方法初始化成员变
12、量 class Point int x,y;/初始化块初始化块 x=10;y=20;System.out.println(Point initialization block);Point();/无参数的构造方法无参数的构造方法 Point(int dx,int dy)/带两个参数的构造方法带两个参数的构造方法 x=dx;y=dy;System.out.println(Point construct method);3.2.3 3.2.3 成员方法的定义成员方法的定义 成员方法主要承担外部操作对象属性的成员方法主要承担外部操作对象属性的接口任务。在一个类中,至少应该包含对类接口任务。在一个类中
13、,至少应该包含对类中的每个成员变量赋值,获取每个成员变量中的每个成员变量赋值,获取每个成员变量的当前值等功能的一系列成员方法。的当前值等功能的一系列成员方法。成员方法也包含静态(成员方法也包含静态(staticstatic)和非静态)和非静态两种形式,分别被称为类方法和实例方法。两种形式,分别被称为类方法和实例方法。实例方法实例方法 定义格式为:定义格式为:Modifiers ResultType MethodName(parameterList)throws exceptions MethodBody Modifiers:Modifiers:修饰符修饰符 ResultType:ResultT
14、ype:方法返回类型方法返回类型MethodName:MethodName:方法名称方法名称parameterList:parameterList:参数列表参数列表 throws exceptions:throws exceptions:列出方法能够抛出的异常种类列出方法能够抛出的异常种类 时间类时间类TimeTime的定义的定义public class Time /时间类时间类 int hour,minute,second;/时、分、秒时、分、秒 void setTime(int h,int m,int s)/设置时间设置时间 hour=(h0)?0:h%24;minute=(m0):0;m
15、%60;second=(s0):0;s%60;int getHour()return hour;/返回时返回时 int getMinute()return minute;/返回分返回分 int getSecond()return second;/返回秒返回秒 成员方法中处理的数据主要来源途径成员方法中处理的数据主要来源途径 q传递给成员方法的参数传递给成员方法的参数q类中的成员变量,包括实例变量和类变量类中的成员变量,包括实例变量和类变量q在方法体内定义的局部变量在方法体内定义的局部变量q在方法中调用其他成员方法所得到的返回值在方法中调用其他成员方法所得到的返回值3.2.4 3.2.4 成员方
16、法的重载成员方法的重载 重载重载 在一个类中,同一个名称的成员方法可在一个类中,同一个名称的成员方法可以被定义多次的现象以被定义多次的现象 。一个成员方法重载的例子一个成员方法重载的例子 在在TimeTime类,我们又增加了一个设置时间的成员类,我们又增加了一个设置时间的成员方法,但这个成员方法的参数属于方法,但这个成员方法的参数属于StringString类,时间类,时间将以将以“12:04:35”“12:04:35”的格式传递给该成员方法。的格式传递给该成员方法。class Time int hour,minute,second;void setTime(int h,int m,int s
17、)/参数为三个参数为三个int变量变量 hour=(h0)?0:h%24;jinute=(m0)?0:m%60;second=(s0)?0:s%60;void setTime(String time)/参数为一个String类对象 hour=Integer.parseInt(time.substring(0,1);hour=hour0?0:hour%24;minute=Integer.parseInt(time.substring(3,4);minute=minute0?0:minute%60;second=Integer.parseInt(time.substring(6,7);second
18、=second0?0:second%60;int getHour()return hour;int getMinute()return minute;int getSecond()return second;/end of class Timepublic class TestTime /测试类测试类public static void main(String args)Time t=new Time();/创建创建Time对象对象 t.setTime(13:04:20);/调用参数为调用参数为String 的的setTime()方法方法 System.out.println(t.getHou
19、r()+:+t.getMinute()+:+t.getSecond();t.setTime(20,30,38);/调用参数为三个调用参数为三个int的的setTime()方法方法 System.out.println(t.getHour()+:+t.getMinute()+:+t.getSecond()将上面这两个类定义存储在一个文件名为将上面这两个类定义存储在一个文件名为TestTime.javaTestTime.java中。经过编译中。经过编译生成生成Time.class和和TestTime.class 运行的结果为:运行的结果为:13:4:20 13:4:20 20:30:38 20:3
20、0:38 3.2.5 3.2.5 构造方法构造方法构造方法构造方法 在构造类对象时使用的一种特殊的成员方在构造类对象时使用的一种特殊的成员方法,其主要作用是初始化成员变量。法,其主要作用是初始化成员变量。构造方法的定义格式为:构造方法的定义格式为:public ClassName(parameterList)publicpublic:控制访问权限的修饰符:控制访问权限的修饰符ClassNameClassName:类名称:类名称parameterListparameterList:参数表:参数表 简单的例子简单的例子class Point int x,y,;Point(int dx,int dy
21、)x=dx;y=dy;/其他的成员方法 构造方法构造方法Point(int dx,int dy)Point(int dx,int dy)仅对两个成员仅对两个成员变量变量x x和和y y赋予了初值。在利用赋予了初值。在利用newnew运算符创建运算符创建PointPoint类对象时,系统会自动地调用这个构造方法,实现类对象时,系统会自动地调用这个构造方法,实现对实例变量初始化,而不需要用户显式地调用它。对实例变量初始化,而不需要用户显式地调用它。构造方法的重载构造方法的重载public class Time int hour,minute,second;Time(int h,int,m,int
22、s)/含有三个含有三个int类型参数的构造方法类型参数的构造方法 Time(long time)/含有一个含有一个long类型参数的构造方法类型参数的构造方法 Time(String time)/含有一个含有一个String类参数的构造方法类参数的构造方法 void setTime(int h,int m,int s)int getHour()int getMinute()int getSecond()在这个类中,有三个构造方法,它们的参数表均不相同。在这个类中,有三个构造方法,它们的参数表均不相同。这样,就可以用三种不同形式的参数创建并初始化对象。这样,就可以用三种不同形式的参数创建并初始化
23、对象。默认构造方法默认构造方法 如果在定义类的时候,没有定义任何构造如果在定义类的时候,没有定义任何构造方法,系统将提供一个参数表为空的默认构方法,系统将提供一个参数表为空的默认构造方法。在这个默认的构造方法的方法体造方法。在这个默认的构造方法的方法体中,只有一个调用父类无参数构造方法的语中,只有一个调用父类无参数构造方法的语句句super()super()。例如:例如:public class Pointint x,y;/其他的成员方法其他的成员方法等价于等价于public class Pointint x,y;public Point()super();/其他的成员方法其他的成员方法 3.
24、3 对象 对象是对现实世界中实体进行抽象的结对象是对现实世界中实体进行抽象的结果,现实世界中的任何实体都可以映射成对果,现实世界中的任何实体都可以映射成对象,而解决问题的过程就是对对象分析、处象,而解决问题的过程就是对对象分析、处理的过程。从面向对象程序设计的观点看,理的过程。从面向对象程序设计的观点看,程序是由有限个对象构成的,对象是程序操程序是由有限个对象构成的,对象是程序操作的基本单位。所谓程序运行,就是对象之作的基本单位。所谓程序运行,就是对象之间不断地发送消息及响应消息的过程。间不断地发送消息及响应消息的过程。3.3.1 3.3.1 对象的创建对象的创建声明对象的语法格式为:声明对象
25、的语法格式为:ClassName objectName,objectName;ClassName objectName,objectName;例如:例如:Date dateObject;Date dateObject;Time timeObject1 Time timeObject1,timeObject2;timeObject2;newnew运算符运算符newnew运算符主要完成的操作运算符主要完成的操作:一为对象分配存储空间一为对象分配存储空间 二根据提供的参数格式调用与之匹配的构造方法二根据提供的参数格式调用与之匹配的构造方法创建对象的格式为:创建对象的格式为:new ClassName
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华 面向 对象 程序设计
限制150内