资源预览内容
第1页 / 共69页
第2页 / 共69页
第3页 / 共69页
第4页 / 共69页
第5页 / 共69页
第6页 / 共69页
第7页 / 共69页
第8页 / 共69页
第9页 / 共69页
第10页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章抽象与封装 3.1 抽象与封装的实现技术 实现抽象和封装 类和对象一个对象包含了若干个成员变量和成员方法,它是现实世界中特定实体在程序中的具体体现。其中,成员变量反映实体的属性状态,成员方法反映实体具有的行为能力,这些内容的规格描述将由类承担,类是对具有类似特征的对象的抽象说明,对象是类的实例。对象体的构成 起/终点、 线形、粗细 和颜色 绘制 直线获取属性值设置属性值成员方法3.2 类 3.2.1 类的定义 Java语言中, 类主要有两个来源途径 Java类库 用户自定义的类 所有的类都是Object类的子类。如果在自定义类 时,没有写明父类,则默认的父类为Object。从 严 格意义上讲,Java程序中定义的所有类都是子类。最简单的类定义格式为 class ClassName ClassBody /类体 class为关键字,ClassName为定义的类名称 ClassBody为类体,包含成员变量、成员方 法、类、接口、构造方法、静态初始化器 类的UML表示一个类的UML图形表示如图 一个Box类的UML表示 BOX类的UML表示Box类的定义 public class Box int long,width, height;void setLong(int longValue)long=longValue;void setWidth(int widthValue)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; 成员变量和成员方法两种形式 实例变量和实例方法每个变量和方法惟一地与一个对象相关联, 即 在创建某个对象时,同时为每个对象创建所有实 例 变量的副本,关联所有的实例方法类变量和类方法(后续章节)类的嵌套定义class OutClass /顶层类 int conut;class InClass /内部类void printConut ()System.out.println(“conut: “+(+ conut);void createInObject()InClass in=new InClass(); /引用内部类in.printConut (); 类的嵌套定义public class TestInClass /用于测试内部类应用的类 public static void main(String args)OutClass outObj=new OutClass(); /创建外部类对象outObj.createInObject(); /调用创建内部类的成员方法OutClass.InClass inObj=outObj.new InClass(); /在外部创建内部类对象inObj.printConut (); 运行结果: conut:1 conut:2 JAVA类的存储有两种存储方式: 一种是将两个类定义存放在一个文件中 另一种是将两个类分别存放在两个不同的文件 中不管类定义的源代码是多个类存放在一个文件中,还是 一个类存放在一个文件中,编译后都将一个类生成一个 字节码文件,且文件名的前缀为类名,后缀为.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 getDay()return day; Book类定义class Book /书籍类 String name;String author;Date publishDate; float price; /其他一些成员变量 /成员方法 Date是描述日期的类,Book是描述书籍的类。在Book类 中,设一个表示出版日期的成员变量,它属于Date类。 Book类与Date类关系可以将这两个类看成具有“整体-部分”的关系。 即 Book类是由Date类对象和一些其他类型的成员变 量 组合而成的,它们共同地反映了书籍信息。下面 是 这种关系的UML图形符号:3.2.2 成员变量的定义与初始化 实例变量的定义Modifiers DataType MemberName;Modifiers: 修饰符,决定成员变量的存储方式和访问权限DataType: 成员变量的类型MemberName:是成员变量的名称初始化实例变量主要有5个途径q每个数据数据类型有默认的初始值q可以在定义的同时赋予相应的初值q在一个成员方法中,为每个实例变量赋值q在类的构造方法中实现初始化实例变量 q利用初始化块对成员变量进行初始化 初始化块、构造方法初始化成员变量 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 成员方法的定义 成员方法主要承担外部操作对象属性的 接口任务。在一个类中,至少应该包含对类 中的每个成员变量赋值,获取每个成员变量 的当前值等功能的一系列成员方法。 成员方法也包含静态(static)和非静态 两种形式,分别被称为类方法和实例方法。 实例方法 定义格式为: Modifiers ResultType MethodName(parameterList) throwsexceptions MethodBody Modifiers : 修饰符 ResultType: 方法返回类型 MethodName: 方法名称 parameterList:参数列表 throws exceptions: 列出方法能够抛出的异常种类 时间类Time的定义public class Time /时间类 int hour, minute, second; /时、分、秒void setTime(int h,int m,int s) /设置时间hour = (h0)? 0: h%24;minute=(m0):0;m%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 成员方法的重载 重载在一个类中,同一个名称的成员方法 可 以被定义多次的现象 。一个成员方法重载的例子在Time类,我们又增加了一个设置时间的成员 方法,但这个成员方法的参数属于String类,时 间 将以“12:04:35”的格式传递给该成员方法。 class Time int hour, minute, second;void setTime(int h,int m,int s) /参数为三个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=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.getHour()+“:“+t.getMinute()+“:“+t.getSecond();t.setTime(20,30,38); /调用参数为三个int的setTime()方法System.out.println(t.getHour()+“:“+t.getMinute()+“:“+t.getSecond() 将上面这两个类定义存储在一个文件名为TestTime.java中。经过编 译 生成Time.class和TestTime.class运行的结果为:13:4:2020:30:38 3.2.5 构造方法构造方法在构造类对象时使用的一种特殊的成员 方 法,其主要作用是初始化成员变量。 构造方法的定义格式为:public ClassName (parameterList)public:控制访问权限的修饰符 ClassName:类名称 parameterList:参数表 简单的例子 class Point int x,y,;Point(int dx,int dy)x=dx;y=dy; /其他的成员方法 构造方法Point(int dx,int dy)仅对两个成 员 变量x和y赋予了初值。在利用new运算符创建 Point 类对象时,系统会自动地调用这个构造方法,实 现 对实例变量初始化,而不需要用户显式地调用它 。 构造方法的重载public class Time int hour, minute, second;Time(int h,int,m,int s) /含有三个int类
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号