JAVA教程 第三讲 Java语言中的面向对象特性Word格式.docx
《JAVA教程 第三讲 Java语言中的面向对象特性Word格式.docx》由会员分享,可在线阅读,更多相关《JAVA教程 第三讲 Java语言中的面向对象特性Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
![JAVA教程 第三讲 Java语言中的面向对象特性Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/19/d44363da-488c-4e76-a33d-b7261321735c/d44363da-488c-4e76-a33d-b7261321735c1.gif)
类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。
在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。
3.消息
消息就是向对象发出的服务请求,它应该包含下述信息:
提供服务的对象标识、服务标识、输入信息和回答信息。
服务通常被称为方法或函数。
3.1.2面向对象的基本特征
1.封装性
封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:
◇把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。
◇信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。
封装的原则在软件上的反映是:
要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"
交叉感染"
,使软件错误能够局部化,大大减少查错和排错的难度。
2.继承性
特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。
例如,轮船、客轮;
人、大人。
一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。
例如,客轮是轮船和客运工具的特殊类。
在Java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。
3.多态性
对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。
例如:
"
几何图形"
的"
绘图"
方法,"
椭圆"
和"
多边形"
都是"
几何图"
的子类,其"
方法功能不同。
3.1.3面向对象程序设计方法
OOA-ObjectOrientedAnalysis 面向对象的分析
OOD-ObjectOrientedDesign 面向对象的设计
OOI-ObjectOrientedImplementation 面向对象的实现
3.2Java语言的面向对象特性
3.2.1类
类是java中的一种重要的复合数据类型,是组成Java程序的基本要素。
它封装了一类对象的状态和方法,是这一类对象的原形。
一个类的实现包括两个部分:
类声明和类体。
1.类声明:
[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]
{……}
其中,修饰符public,abstract,final说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。
2.类体
类体定义如下:
classclassName
{[public|protected|private][static]
[final][transient][volatile]type
variableName;
//成员变量
[public|protected|private][static]
[final|abstract][native][synchronized]
returnTypemethodName([paramList])[throwsexceptionList]
{statements} //成员方法
}
3.成员变量
成员变量的声明方式如下:
[public|protected|private][static]
//成员变量
其中,
static:
静态变量(类变量);
相对于实例变量
final:
常量
transient:
暂时性变量,用于对象存档
volatile:
贡献变量,用于并发线程的共享
4.成员方法
方法的实现包括两部分内容:
方法声明和方法体。
[final |abstract][native][synchronized]
returnTypemethodName([paramList])
[throwsexceptionList] //方法声明
{statements} //方法体
方法声明中的限定词的含义:
类方法,可通过类名直接调用
abstract:
抽象方法,没有方法体
方法不能被重写
native:
集成其它语言的代码
synchronized:
控制多个并发线程的访问
◇方法声明
方法声明包括方法名、返回类型和外部参数。
其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。
对于简单数据类型来说,Java实现的是值传递,方法接收参数的值,但不能改变这些参数的值。
如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。
例3-1说明了简单数据类型与引用数据的区别。
【例3-1】
importJava.io.*;
publicclassPassTest{
floatptValue;
publicstaticvoidmain(Stringargs[]){
intval;
PassTestpt=newPassTest();
val=11;
System.out.println("
OriginalIntValueis:
+val);
pt.changeInt(val);
//值参数
IntValueafterChangeis:
+val);
/*值参数
值的修改,没有影响值参数的值*/
pt.ptValue=101f;
OriginalptValueis:
+pt.ptValue);
pt.changeObjValue(pt);
//引用类型的参数
ptValueafterChangeis:
/*引用参数值的修改,改变了引用参数的值*/
publicvoidchangeInt(intvalue){
value=55;
//在方法内部对值参数进行了修改
publicvoidchangeObjValue(PassTestref){
ref.ptValue=99f;
//在方法内部对引用参数进行了修改
}
运行结果
c:
\>
JavaPassTest
OriginalIntValueis:
11
101.0
ptValueafterChangeis:
99.0
◇方法体
方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。
方法体中声明的局部变量的作用域在该方法内部。
若局部变量与类的成员变量同名,则类的成员变量被隐藏。
例3-2说明了局部变量z和类成员变量z的作用域是不同的。
【例3-2】
classVariable{
intx=0,y=0,z=0;
//类的成员变量
voidinit(intx,inty){
this.x=x;
this.y=y;
intz=5;
//局部变量
**ininit**"
);
x="
+x+"
y="
+y+"
z="
+z);
}
publicclassVariableTest{
publicstaticvoidmain(Stringargs[]){
Variablev=newVariable();
**beforeinit**"
+v.x+"
+v.y+"
+v.z);
v.init(20,30);
**afterinit**"
+v.x+"
JavaVariableTest
**beforeinit**
x=0y=0z=0
**ininit**
x=20y=30z=5
**afterinit**
x=20y=30z=0
上例中我们用到了this,这是因为init()方法的参数名与类的成员变量x,y的名字相同,而参数