第4章类和对象.docx

上传人:b****5 文档编号:2867587 上传时间:2022-11-16 格式:DOCX 页数:34 大小:216.71KB
下载 相关 举报
第4章类和对象.docx_第1页
第1页 / 共34页
第4章类和对象.docx_第2页
第2页 / 共34页
第4章类和对象.docx_第3页
第3页 / 共34页
第4章类和对象.docx_第4页
第4页 / 共34页
第4章类和对象.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

第4章类和对象.docx

《第4章类和对象.docx》由会员分享,可在线阅读,更多相关《第4章类和对象.docx(34页珍藏版)》请在冰豆网上搜索。

第4章类和对象.docx

第4章类和对象

第4章类和对象

Java语言是典型的面向对象程序设计语言。

本章将结合面向对象程序设计思想和Java语言,通过对类和对象的详细介绍,来阐述用Java语言实现面向对象思想中的抽象性和封装性这两大特性。

本章内容具体涉及到类和对象的概念、类的定义、对象的初始化和清除、一些特殊形式的类等。

4.1类和对象

在面向对象设计语言出现之前,是利用的过程程序语言如Pascal、C等来编写程序的,这些过程程序设计语言是将算法转化成程序代码,由于程序中数据和过程或函数是分开的,如果对程序的功能发生一点变化,假设新增一个功能函数,这可能需要程序员对程序做较大程度的修改。

这就使得过程程序设计语言的重用性、可用性、灵活性、适应性等方面不如人意。

面向对象程序设计语言是利用面向对象特性可以很好的改善过程设计语言中存在的问题。

面向对象语言是立足类和对象概念,能较好地反映和模拟现实世界,充分体现了程序的模块化、重用性、可用性。

4.1.1对象和类的基本概念

面向对象程序设计语言中是以类和对象为核心内容。

对象实际上就是对现实世界的存在实体的模拟,例如一本书、一双鞋子、一台电脑都可以视为一个对象,甚至一位学生也可以是一个对象。

对于每一个对象都有自己的状态和行为。

现在以某一学生为例,学生对象的状态可以通过姓名、出生日期、学号、籍贯、系别、专业、选修课程名等属性来说明,用注册学籍、选择选修课程、阅读书籍等动作说明该对象的行为。

假设一位名叫张三的学生是一个对象。

这一对象有学号(23232)、姓名(张三)、出生日期(1984年2月3日)等属性。

“张三”通过注册学籍动作,开始一个学期的学习生活,通过选修“Java语言”课程,可以使“张三”可以参加“Java语言”课程的学习。

从上述的简单描述可以知道,对象的状态实际上是描绘对象静态的属性特征,对象的行为是说明对象的会发生变化的动态行为。

为此,可以定义整型量表示学号、字符串量表示姓名等属性。

定义register()、chooseCourse()等方法表示注册、选修课程等动作。

面向对象程序设计是通过具体的数据来描绘对象的状态,而对象的行为往往是通过方法的调用来体现。

当该生发生“选择课程”动作的时候,对象“张三”调用方法“chooseCourse()”,方法的参数是“2006-2007学期”。

对于外界而言,张三同学基于什么考虑选择课程并不是问题的重点,即“chooseCourse()”方法是如何实现“选择课程”的动作并不重要,重点是通过调用“chooseCourse()”方法可以实现“选择课程”这一动作,改变了“张三”这一对象的内部状态“选修课程名”。

数据“选修课程名”隐藏在对象的内部,通过方法“chooseCourse()”实现对数据“选修课程名”的访问和修改。

这种外界通过调用对象的方法进行联系的方式体现了对象的信息封装。

因此,可以认为对象是数据以及相关操作封装在一起的实体。

类是面向对象程序设计中的另一个重要概念。

它是对一组具有相同属性、行为、关系以及语义的对象的描述。

对于每个类都有别于其他类。

在Java语言中,类是对具有相同类型对象的抽象,在一个类中可以用变量来表示对象的抽象状态,而用方法抽象出对象的行为特征。

简单的说,一个叫“张三”的学生个体是一个对象,而定义一个“Student”类可以泛指学生类型。

从图4-1中可以看到,“Student”类中用变量Id、name、birthday等分别表示学号、姓名、出生日期等静态属性,用register()、chooseCourse()等方法描绘学生的注册、选修课程等动态属性。

而“张三”是“Student”类的一个对象,具有的特征如学号(Id=23232)、姓名(name=“张三”)、出生日期(birthday=“1984年2月3日”)等。

在用Java语言编写程序的时候可以把类理解为数据类型,而把对象理解为数据类型中的变量实例。

图4-1类和对象的关系

4.1.2类的声明

类是面向对象的基础。

首先,类的声明格式如下:

[修饰符]class类名[extends父类][implements接口名1,…,接口名n]

{

类的成员

}

类的定义有两大部分组成:

类体和类头。

类体是用“{}”括起的部分,而其余部分是类头,规定类的一些基本性质。

“[]”包括的内容是可选项。

修饰符是一些关键字,用于说明类的可访问性(如public)和其他非访问性质(如final、static、abstract等)。

访问控制符限定了类的可访问性,即,对其他类是否可见。

非访问控制符是指用于限定类的性质的关键字,它们往往限定类是否是具有某些特征的类。

例如,关键字final可以定义一个最终类,关键字static可用于定义静态嵌套类(见4.6.1),而abstract用于抽象类(见第5章5.2)。

一些关键字是不能同时修饰类的。

例如final和abstract是不能同时定义类。

关于这些具有特殊性质的类将在第5章介绍。

关键字class表示开始定义一个类。

在class后的类名必须符合标识符的命名规则。

一般来说,类名可以有一个或多个英文单词构成,每个单词的第一个字符必须是大写,其他字符小写;例如,类名Student,类名JOptionPane。

关键字extends用来说明该类的父类。

也就是该类是指定父类的子类。

二者体现的是继承关系。

关键字implements定义了该类实现的接口表,在该接口表中说明可以实现的一个或多个接口。

类体说明的是类的成员。

类的成员包括两大部分:

类的成员变量和类的成员方法。

对于类的成员将在4.1.4详细说明。

下面有一个类Student声明的实例:

publicclassStudent{//定义一个Student类

//定义成员变量

privateintId;//定义学号属性

privateStringname;//定义姓名属性

privateDatebirthday;//定义出生日期属性

privateStringcourseName[];//定义课程名

...

//定义成员方法;

publicStudent(intstudentId){

…..}

publicbooleanregister(Dated){//定义注册学籍方法

...}

publicvoidchooseCourse(String[]cname){//定义选修课程方法

...}

....

}

4.1.3类的访问控制

类的访问控制是定义类的访问权限,它说明了其他类对本类的访问方式。

类的访问方式有两种,一种是由public关键字说明的公共访问方式,另一种是默认访问方式,即没有访问控制关键字修饰的类,有时也称为包私有(package-private)访问方式。

关键字public修饰的类,说明该类是公共类,该类能被所有的类进行访问和引用。

Java语言提供了大量的公共类,比如在前几章常用的几个类如java.util.Date、javax.swing.JoptionPane、java.lang.String等都是公共类。

公共类可处于不同的包,如Date类在java.util包,JOptionPane类在java.swing包里。

对于不同包中公共类,可以注明所在的包名直接引用公共类,也可以通过先导入包名再引用公共类。

关于包的介绍将在4.2中说明。

例如:

importjava.util.*;//导入java.util包

publicclassStudent{//定义一个Student类

privateDatebirthday;//定义出生日期属性,定义java.util.Date变量birthday;

privateStringcourseName[];//定义课程名

...

publicStudent(intstudentId){

…..}

publicbooleanregister(Dated){//定义注册学籍方法

...}

publicvoidchooseCourse(String[]cname){//定义选修课程方法

...}

}

在上面的程序段中,类Student是引用了java.util包的公共类Date。

另外,类Student也是一个公共类,可以为其他类所访问和引用。

默认访问方式,也称为包私有(package-private)访问方式。

这种访问方式只允许本包内的类进行访问,对于包外的类是私有的,无法进行访问。

对于包私有类,即使通过导入语句将类所在的包通过import关键字导入,其他包的类仍是无法访问。

例如图4-2中的访问控制示例。

图4-2展示的Example1包定义了两个类A和B,其中类A是公共类,B是默认的包私有类。

类A对于所有的类都是可见的,与类是否是处于同一个包无关。

因此,类B和类C均可以访问和引用类A。

而处于包Example2的类C需要导入类A所在的包Example1才可访问类A。

至于类B,只能对同一个包的类可见。

在这个图例中类B只对类A可见。

至于Example2包中的类C,它只可以访问类A而不能访问类B。

如果类C强行引用类B,会超出类B的可访问权限,导致编译错误。

图4-2类控制访问示例

4.1.4类的成员

类的成员包括类的成员变量和成员方法。

注意有时也可以称成员变量为数据成员。

用类的成员变量描绘类的属性,用成员方法描绘类的功能和操作。

1.成员变量的定义

[访问控制符][static][final][transient][volatile]数据类型变量名;

同上“[]部分”表示可选项,访问控制符包括了public、private、protected等关键字。

static、final、transient和volatile是非访问控制修饰符,用于说明类的成员变量的性质。

例如,关键static说明成员变量是静态数据,关键字final修饰符使得变量成为常量,transient变量说明成员变量不能被序列化,关键字volatile的修饰使得变量能从主存读取,进行异步修改。

对于数据类型,它可以是基本数据类型如int、char等,也可以是Java语言提供的类如java.util.Date、java.lang.String,也可以是用户自定义的类如上面定义的Student类。

变量名必须符合标识符命名规则。

在面向对象程序设计语言中,有一个默认规则就是变量名可以由一个或多个英文单词构成,其中第一个单词的第一个字符必须小写,如是由多个单词构成,其他单词的第一个字符必须大写,其他字符小写,例如变量名studentName。

表4-1基本类型的默认值

基本类型

默认值

基本类型

默认值

boolean

false

int

0

char

‘\u0000’(null)

long

0L

byte

(byte)0

float

0.0f

short

(short)0

double

0.0d

变量名在定义的同时可以进行初始化。

如果数据类型是基本数据类型,可以直接将初始值赋值给成员变量,要是没有声明初始值,系统会根据数据类型的不同自动为成员变量赋一个初始值,表4-1列出了各基本类型的默认值。

如果数据类型是一个类,可以通过操作符new创建一个对象赋值给成员变量,形如“类名成员变量=new类名([行参表])”例如:

name=newString("张三");

2.成员方法的定义

[访问控制符][static][final][abstract][native][synchronized]返回值数据类型方法名([参数表])[throws异常名表]

{方法体

}

类的成员方法的访问控制符决定其他类是否可以该方法,控制符有p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1