第7章对象和类_第1页
第7章对象和类_第2页
第7章对象和类_第3页
第7章对象和类_第4页
第7章对象和类_第5页
已阅读5页,还剩35页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 对象和类Java程序设计程序设计2学习目标l 本章介绍Java面向对象程序设计的基本知识:定义类、创建对象及使用对象解决实际问题Java程序设计程序设计37.1 对象和类的概念l 面向对象程序设计的核心是使用对象编程。 对象(object)代表现实世界中可以明确识别的一个整体事物。例如:一个教师、一个学生、一个矩形、软件界面中的一个窗口等,都可以看作是一个对象。l 对象必须具备自己独有的特征:状态和行为。 对象的状态用一组数据的值来描述,称为数据域;对象的行为由一组对象能够完成的方法来描述。例如:一个矩形对象可以有宽和高两个数据域,它们的数值是矩形对象存在基础;同时矩形对象具有根据宽和

2、高计算面积和周长的方法。Java程序设计程序设计47.1 对象和类的概念l 类(class)是定义同一类型对象的结构。例如:在特定场合下,所有的矩形都必须具有宽和高两个double类型数据域,具有计算面积的方法和计算周长的方法。在类中使用变量来表示数据域;方法表示行为。此外在类中还必须具有一种特殊的方法,称为构造方法,调用它可以创建类的对象。Java程序设计程序设计57.1 对象和类的概念l 面向对象程序设计正是利用对现实世界中对象的抽象和对象之间关系的直接描述实现软件系统,它具有以下四个基本特性:抽象性:是指对现实世界中某一类实体或事物进行抽象,提取它们的重要的共同特征,忽略次要特征,从而形

3、成程序中的对象和类。封装性:是指对象的使用者在通过预定义的接口去使用对象提供的服务时,无需了解这些服务是如何实现的。继承性:是指建立子类时可以继承父类的全部或部分特征,并增加子类独有的特征,从而简化子类的设计。多态性:是指程序中不同的对象在收到相同的外部消息时会做出不同响应的能力。多态性扩大了对象的适应能力,使程序可扩展性更好。Java程序设计程序设计67.2 类的定义类是一种抽象数据类型,Java语言定义类的语法如下: 修饰符 class 类名 /类的数据域成员 数据域1; 数据域2; /类的方法成员 构造方法1; 构造方法2; 方法1; 方法2;Java程序设计程序设计77.2 类的定义l

4、 类定义的语法结构由类头和类体两个部分组成。类头自左向右包括可选的修饰符、关键字class、类名。类名用标识符命名,通常用名词或名词性短语,构成类名的每个单词的首字母都应大写。l 类体由一对大括号括起来。类的组成部分称为类成员,包括数据域和方法成员。数据域成员的定义方式与变量定义相同,语法格式如下: 修饰符 数据类型 数据域名;Java程序设计程序设计87.2 类的定义方法成员包括:方法和构造方法。 构造方法是特殊的方法,用于创建和初始化对象。构造方法的语法规则包括: 修饰符 类名(形式参数列表)。Java程序设计程序设计97.2 类的定义Java程序设计程序设计107.3 创建对象l 构造方

5、法用于创建类的对象,进行了重载的构造方法可以方便地用不同的初始值创建对象。构造方法不能像其它方法一样直接调用,需要使用new运算符进行调用,语法格式如下: new 构造方法(实参列表);l 调用构造方法时同样要求实参与形参在数量和顺序上匹配,类型兼容,否则会出现构造方法找不到的语法错误。下面语句创建了Rectangle类的两个对象: new Rectangle(); /调用无参构造方法,创建宽和高都为0的矩形对象 new Rectangle(10, 15);/调用有参构造方法,创建宽10高15的矩形对象Java程序设计程序设计117.3 创建对象l Java语言的每个类都必须有构造方法。但是有

6、些类的结构中没有定义构造方法,这种情况下,Java编译器会为类自动添加一个方法体为空的无参构造方法,称为默认构造方法。注意只有在类没有显式定义构造方法的情况才会自动添加默认构造方法。l 类是对象的模板,定义了属于该类的对象应该具有的数据和方法。一个对象是类的一个特定的实例。可以从一个类创建多个对象。创建类的一个对象称为实例化。对象和实例两个概念可以互换使用。Java程序设计程序设计127.4 访问对象l 使用new运算符调用构造方法后,创建的对象在内存中占有一定的空间。Java程序设计程序设计137.4.1 引用类型和引用变量使用类定义的变量称为引用变量。Java语言使用引用变量来访问对象,引

7、用变量中存放一个对象的地址,定义引用变量的语法格式如下: 类名 引用变量名; 类在定义引用变量时也称为引用类型。用类定义的引用变量能够存放该类的一个对象的地址,称为引用该对象。如数组变量也是引用变量,数组变量可以引用一个数组对象。7.4.1 引用类型和引用变量两个Rectangle类的引用变量: Rectangle rect1, rect2;rect1, rect2 是Rectangle的对象,下面的语句创建了两个对象 rect1 = new Rectangle(); rect2 = new Rectangle(10, 5);也可以把声明引用变量 、创建对象和给引用变量赋值在一条语句完成,例如

8、: Rectangle rect = new Rectangle(10, 5);特别强调,引用变量中并没有直接存放对象,它只是存放了对象的地址。Java程序设计程序设计14Java程序设计程序设计157.4.2 访问对象的成员创建对象并通过引用变量引用该对象后,可以使用成员运算符“.”访问对象的数据域成员和方法成员。语法格式如下: 访问数据域成员:引用变量引用变量.数据域名数据域名 访问方法成员:引用变量引用变量.方法名方法名(实参列表实参列表)如以下访问Rectangle对象的成员的语句: Rectangle rect = new Rectangle(10, 5); System.out.p

9、rintln(Area= + rect.getArea(); /输出:Area=50.0 rect.width = 6; /把该矩形对象的width赋值为6 System.out.println(Area= + rect.getArea(); /输出:Area=30.0Java程序设计程序设计167.4.3 数据域的初始值l Java语言使用直接量null表示引用变量没有引用对象。调用类的构造方法创建对象时,如果构造方法中没有为对象的数据域赋值,则对象的数据域会获得默认的初始值。Java语言规定了不同类型的数据域的默认初始值:引用类型为null,数值类型为0,boolean类型为false,c

10、har类型为u0000。如描述课程的类部分定义。public class Course 调用默认构造方法创建对象 String name; /课程名 null int hours; /学时 0 double credit; /学分 0.0 boolean isRequired; /是否必修 false char grade; /课程等级 u0000 Java程序设计程序设计177.4.4 类与对象应用实例例7.1:定义一个类并创建和使用对象。定义本章的矩形类Rectangle,创建该类的对象并通过引用变量使用对象。 解题思路:本例创建两个类:用于描述矩形的Rectangle类,前面已经给出类的

11、定义;用于使用Rectangle的类TestRectangle,该类只有main方法,main方法中定义引用变量、创建对象并计算矩形的面积和周长等。Java程序设计程序设计187.4.4 类与对象应用实例程序源码:包括两个类的源程序文件。(1)矩形类Rectangle的源程序/文件名:Rectangle.java public class Rectangle double width; /宽度 double height; /高度 Rectangle() /无参构造方法 width = 0; height = 0; Rectangle(double w, double h) /有参构造方法 w

12、idth = w; height = h; double getArea() /计算面积的方法 return width * height; double getPerimeter() /计算周长的方法 return 2 * (width + height); Java程序设计程序设计197.4.4 类与对象应用实例(2)测试类TestRectangle的源程序/文件名:TestRectangle.javapublic class TestRectangle public static void main(String args) Rectangle rect = new Rectangle(

13、10, 5); System.out.println(面积: + rect.getArea(); System.out.println(周长: + rect.getPerimeter(); rect.width = 6; System.out.println(面积: + rect.getArea(); System.out.println(周长: + rect.getPerimeter(); Java程序设计程序设计207.5 类成员的可访问性 面向对象程序设计的特性之一是封装性,Java语言通过访问修饰符对类及其成员的使用范围进行限制。Java程序设计程序设计217.5.1 包 Java语言

14、使用包(package)来管理应用程序中的类,Java语言的每一个类都位于一个特定包中。没有指定类在哪个包中,这样定义的类位于默认包中,Java语言虽然允许但不推荐把类置于默认包中。使用包来管理类有四个优点:(1)把功能相近的类置于同一个包中便于查找类;(2)当编写的类被其他应用程序重用时,将类置于包中可以减少或避免命名冲突的情况出现;(3)使用包可以更加灵活的处理类及其成员的可访问性,更好地对类进行保护;(4)使用具有层次关系的包管理类,更加便于应用程序的发布。Java程序设计程序设计227.5.1 包l Java语言的包是具有层次关系的,一个包中还可以包含子包。为包进行命名时,使用“.”分

15、隔父包与其子包。例如包名java.lang说明顶层包为java,其中包含了lang子包;而类名java.lang.Math说明Math类位于包java.lang中。通常包名全部使用小写字母命名。l 把类置于包中需要在源程序中使用package语句,该语句必须位于一个源程序文件中的第一条语句,其前面只能有注释。package语句的语法格式如下:l package 包名;l package语句的作用是把该源程序文件中定义的所有类置于同一个包中。下面通过一个例子说明如何把类置于指定包中。Java程序设计程序设计237.5.1 包例7-2:把类置于包中的例子。程序源码:/文件名:TestPackage

16、.javapackage ch07.pkg01; /把本源程序文件中的类置于ch07.pkg01包中 public class TestPackage void printMessage() System.out.println(Welcome to java.); Java程序设计程序设计247.5.1 包l 使用包管理应用程序的类时,如果使用类和被使用类位于同一包中,可以不需要进行特别说明直接使用。如果两个类不在同一包中,有两种方式: 第一种方式是使用类的命名。这种方式在程序中仅使用类几次还可以,如果使用次数非常多就不方便了。 第二种方式是使用import语句导入类。import语句作用是

17、在当前源程序中导入指定的类,可以只使用类名的方式使用该类。import语句位于源程序代码中包语句后面,类定义之前。import语句有两种使用形式,例如: import javax.swing.*; /导入javax.swing包中的所有类 import javax.swing.JOptionPane; /导入JOptionPane一个类l 上面两种import方式对程序的编译和运行效率的影响是相同的。Java程序设计程序设计257.5.2 访问修饰符l 访问修饰符用来限制应用程序中类和类成员的使用范围,Java语言提供了public、protected、private三个访问修饰符实现四种访问

18、范围。下表中列出了Java语言的四种访问范围。访问修饰符访问修饰符 同一类范围同一类范围内内同一包范围同一包范围内内子类范围内子类范围内 其他范围内其他范围内publicprotected无privateJava程序设计程序设计267.5.2 访问修饰符public class C1 public int x; int y; private int z; public void m1() void m2() private void m3() public class C2 C1 o = new C1(); 可以访问 o.x 可以访问 o.y 不能访问 o.z 可以调用 o.m1() 可以调用

19、 o.m2() 不能调用 o.m3() public class C3 C1 o = new C1(); 可以访问 o.x 不可以访问 o.y 不能访问 o.z 可以调用 o.m1() 不可以调用 o.m2() 不能调用 o.m3() 包p1;包p2;Java程序设计程序设计277.5.3 类的封装类的封装是指合理使用访问修饰符,使类及其成员具有合理的访问范围。通常的做法是把类和类中需要给其它类调用的方法成员用public修饰,构造方法也用public修饰,然后对数据域进行封装。数据域封装是指数据域用private修饰,为每个数据域提供访问器方法和修改器方法。 访问器方法:public 数据类

20、型 get属性名() 修改器方法:public void set属性名(数据类型 形参)特别地,数据类型为boolean时,访问器方法定义为如下形式: public 数据类型 is属性名()Java程序设计程序设计287.6 类的静态成员Java语言的类包括静态成员和实例成员两种类型的成员。实例成员的概念前面已经讲述。使用static修饰的成员称为静态成员,包括静态数据域(也称类变量)、静态方法(也称类方法)。静态成员属于类本身,而不属于类的任何一个对象。见例7-4:为Rectangle2类增加表示创建对象个数的静态数据域,及获取其值的静态访问器方法。新定义的矩形类命名为Rectangle3。

21、Java程序设计程序设计297.6 类的静态成员实例数据域与静态数据域的区别是:实例数据域属于特定的对象,一个类可以使用new运算符创建很多对象,每个对象独立拥有自己的实例数据域。本例无论创建多少个矩形对象,每个对象都独立拥有自己的实例数据域width和height。静态数据域是类拥有的,所有创建的矩形对象以共享方式访问。本中的静态数据域numberOfRectangles是所有创建的矩形对象共享的。在访问修饰符允许的情况下,访问静态数据域的方式: 对象引用变量.静态数据域 /不推荐使用该方式 类名.静态数据域 /推荐使用该方式Java程序设计程序设计307.6 类的静态成员 实例方法与静态方

22、法的区别也在于静态方法是属于类的,可以在不创建对象的情况下通过类名调用。在静态方法中只能使用本类中的静态成员,不能使用实例成员,而在实例方法中静态和实例成员都可以使用。对静态方法的调用的形式: 对象引用变量.静态方法(参数) /不推荐使用该方式 类名.静态方法(参数) /推荐使用该方式Java程序设计程序设计317.7 类和对象应用 Java语言的类和对象的定义和使用过程中还有其它需要注意的问题,如类中各种变量的作用域、关键字this的使用、对象数组和对象作为方法的参数等。Java程序设计程序设计327.7.1 变量的作用域l 一个类中的变量主要有类的数据域和局部变量两种形式。l 局部变量是指

23、在类的方法中定义的变量,不能使用访问修饰符限制作用域,其作用域为定义变量的语句开始到该语句所属的语句块的右大括号。Java程序设计程序设计337.7.1 变量的作用域l 类的数据域在类内部的作用域与访问修饰符无关,无论在类的任何位置定义数据域,其作用域均为整个类范围,见图(a)。一个特殊情况是某数据域的初始化时使用了另一个数据域,此时被使用的数据域必须定义在前面,如图 (b)所示。Java程序设计程序设计347.7.1 变量的作用域l Java语言允许类方法中的局部变量与类的数据域同名。这种情况下,在定义局部变量的方法内部,局部变量将屏蔽数据域,即局部变量有效。参见如下程序代码:public class Sample private String name = 张三; public void printName() String name = 李四; System.out.println(name= + name); Java程序设计程序设计357.7.2 关键字thisl 类的实例方法中有时会需要引用该类的当前对象,从而访问当前对象数据域或调用当前对象的实例方法。Java语言使用关键字this表示对类的当前对象的引用。类的实例方法中可以用如下方式对当前对象的数据域或方法进行引用: this.数据域 /引用当前对象的数据域 this.实例方法(参数) /引用当前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论