java面向对象编程:JAVA教程 第 3讲 Java语言中的面向对象特性

mgD'p|'L3.1 面向对象技术基础
#@KY&]Uj9OJAVA中文站社区门户w8eB5z"Fak
3.1.1 面向对象基本概念JAVA中文站社区门户U V U f5a CKc

Yg @(M8C5^q%]M  面向对象基本思想JAVA中文站社区门户u^.J(Wv5Xv+{^
  面向对象是种新兴设计思路方法,或者是种新设计规范标准(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行设计从现实世界中客观存在事物(即对象)出发来构造软件Software系统并且在系统构造中尽可能运用人类自然思维方式开发个软件Software是为了解决某些问题这些问题所涉及业务范围称作该软件Software问题域其应用领域不仅仅是软件Software还有计算机体系结构和人工智能等JAVA中文站社区门户8c4^3Hc#|$k$j
JAVA中文站社区门户9o%`7O9Tz'NlyL:b
  1. 对象基本概念JAVA中文站社区门户9~bq,K!V;@Pg

M3]l$Zu%R2^  对象是系统中用来描述客观事物个实体它是构成系统个基本单位个对象由组属性和对这组属性进行操作组服务组成从更抽象角度来说对象是问题域或实现域中某些事物个抽象它反映该事物在系统中需要保存信息和发挥作用;它是组属性和有权对这些属性进行操作组服务封装体客观世界是由对象和对象的间联系组成JAVA中文站社区门户p X i#X R r0`n:@

A%mtd`  主动对象是组属性和组服务封装体其中至少有个服务不需要接收消息就能主动执行(称作主动服务)JAVA中文站社区门户.\7}Q l+aC H [
  JAVA中文站社区门户JbgtPH:p:sP
 2. 类基本概念
)E5t df1La
Px1n/P/OjPg  把众多事物归纳、划分成些类是人类在认识客观世界时经常采用思维思路方法分类原则是抽象类是具有相同属性和服务组对象集合它为属于该类所有对象提供了统抽象描述其内部包括属性和服务两个主要部分在面向对象编程语言中类是个独立单位它应该有个类名并包括属性介绍说明和服务介绍说明两个主要部分类和对象关系就如模具和铸件关系例子化结果就是对象而对类对象抽象就是类
6NP/zGvu  JAVA中文站社区门户+r)y#sW)Ta%\%X

Y!zDom1k[%}*cS 3. 消息
kT:li r/_E?*B0m{OJAVA中文站社区门户;{)Y W3a1mgp-Kr2T
  消息就是向对象发出服务请求它应该包含下述信息:提供服务对象标识、服务标识、输入信息和回答信息服务通常被称为思路方法或JAVA中文站社区门户3p8VTKF7nw z

uF?Z u[5HE8x3.1.2 面向对象基本特征
wds;LX8q h
;]5~x[0re 1.封装性JAVA中文站社区门户!F&x/f0? xj

)['{[w'JV.Dl  封装性就是把对象属性和服务结合成个独立相同单位并尽可能隐蔽对象内部细节包含两个含义:JAVA中文站社区门户*kIP8u u
  ◇ 把对象全部属性和全部服务结合在形成个不可分割独立单位(即对象)
%t?G ~1\R5Y)S  ◇ 信息隐蔽即尽可能隐蔽对象内部细节对外形成个边界〔或者说形成道屏障〕只保留有限对外接口使的和外部发生联系JAVA中文站社区门户Oqx~-Y![
  封装原则在软件Software上反映是:要求使对象以外部分不能随意存取对象内部数据(属性)从而有效避免了外部对它"交叉感染"使软件Software能够局部化大大减少查错和排错难度JAVA中文站社区门户;c+T}Y$wHP:k6IF
  JAVA中文站社区门户gJ X3If w:o+l

mJ _,xDJ[ ]o 2.继承性
D$un2h.Q ~h SJAVA中文站社区门户Bt;f;EU]8E7C&G X4D
  特殊类对象拥有其般类全部属性和服务称作特殊类对般类继承例如轮船、客轮;人、大人个类可以是多个般类特殊类它从多个般类中继承了属性和服务这称为多继承例如客轮是轮船和客运工具特殊类在java语言中通常我们称般类为父类(super,超类)特殊类为子类(sub)JAVA中文站社区门户-Sf%\5N8D]+A4c

{0aE0wi7tf;X[ P 3.多态性
*\9{3\5v#E4_5{2W J
%M c0O i9x  对象多态性是指在般类中定义属性或服务被特殊类继承的后可以具有区别数据类型或表现出区别行为这使得同个属性或服务在般类及其各个特殊类中具有区别语义例如:"几何图形""绘图"思路方法"椭圆"和"多边形"都是"几何图"子类其"绘图"思路方法功能区别
J4PR~"X*|,yJAVA中文站社区门户rF#G:yeR:B
3.1.3 面向对象设计思路方法JAVA中文站社区门户F)H0w@ ?m [a

CP7I Cst M    OOA-Object Oriented Analysis     面向对象分析JAVA中文站社区门户A3H`7CgZ
  JAVA中文站社区门户 @#M:il} |ga6P
  OOD-Object Oriented Design      面向对象设计
YO%q[sk7AVV  
h0q8uy*T7?  OOI-Object Oriented Implementation  面向对象实现

;q&m#FJb1m)eM 3.2 Java语言面向对象特性
m:wP9?;d9^ [JAVA中文站社区门户%T7WM$iC \`~,x
3.2.1 类JAVA中文站社区门户,Hyh,Ic {j"d
JAVA中文站社区门户n~[7D8^*f$ED
  类是java中种重要复合数据类型是组成java基本要素它封装了类对象状态和思路方法是这类对象原形个类实现包括两个部分:类声明和类体
(JWD4v-kJAVA中文站社区门户Ev)rC @N"X1_1}
 1.类声明:JAVA中文站社区门户rW!c-[Wad
JAVA中文站社区门户*c$M'r-v_Lq$BX.s%I9_ u
  [public][abstract|final] Name [extends superName] [implements erfaceNameList]
Q[2S1W#ZY.UgD)K  {……}
,kD0jUqTe5cJAVA中文站社区门户 S(~(@ |`T Z
  其中修饰符public,abstract,final 介绍说明了类属性Name为类名superName为类父类名字erfaceNameList为类所实现接口列表
t KU zXpJJAVA中文站社区门户iD$Eb!l @
 2.类体JAVA中文站社区门户#O^s#]:s6N&h)JR
JAVA中文站社区门户qij.cU3V9m
  类体定义如下:JAVA中文站社区门户*I~)RF,x{g
   NameJAVA中文站社区门户*T"U4Gj`6b.q
  {[public | protected | private ] [] JAVA中文站社区门户+u3[9?!de.v6G9l [ w
  [final] [transient] [volatile] typeJAVA中文站社区门户/G;IY n4z r?KK6tK
  variableName;                 //成员变量
p0P,@+VP lVjG  [public | protected | private ] []
jg `j%c  [final | abstract] [native] [synchronized]
\&P1h$r)T3q:s#i)J  Type methodName([paramList]) [throws exceptionList]JAVA中文站社区门户"D'N}.q1}.t U
   {statements}                 //成员思路方法JAVA中文站社区门户$e"z ICJs
  }
p ?D4\%KIJAVA中文站社区门户G+o TlA;Xt
 3.成员变量JAVA中文站社区门户&i2l(Al&B2J%o\ X$d

+A0C'@(]L  成员变量声明方式如下:
x"T!I_ f{&a9xO  [public | protected | private ] [] JAVA中文站社区门户`sJ5G&r(P(|
  [final] [transient] [volatile] type
P`x/DRm7p  variableName;                 //成员变量
f |4y u V6L[ yb  其中
YN(m+d`VG  : 静态变量(类变量);相对于例子变量
l,onT J B A  final: 常量JAVA中文站社区门户YSO'TX1k8ps
  transient: 暂时性变量用于对象存档
,u6V~\4F%}4u4E[#}J  volatile: 贡献变量用于并发线程共享JAVA中文站社区门户[s,^!{c
JAVA中文站社区门户Jk~k6@0tL:@h
 4.成员思路方法JAVA中文站社区门户)^2XYS ^2e-d3a

Ju/d@s~nJ)V1H  思路方法实现包括两部分内容:思路方法声明和思路方法体
_"X*@F9B.u(Tu  [public | protected | private ] []
1l8`JM:[c {0Z a1a  [final | abstract] [native] [synchronized]
9V7[Zj U#b-FCZ  Type methodName([paramList])JAVA中文站社区门户C2V+y,P(h(f
  [throws exceptionList]            //思路方法声明JAVA中文站社区门户0u,?R7CnuR0D!p^4A
   {statements}                //思路方法体JAVA中文站社区门户o7Ruxn@O

6bqagETU;s6p  思路方法声明中限定词含义:
H%LD&PGrM2aA  : 类思路方法可通过类名直接
Y+Y{+@ X3K5|}m  abstract: 抽象思路方法没有思路方法体
!C ym!DaueZ  final: 思路方法不能被重写
N4@9K*v G e U(w x  native: 集成其它语言代码
6~#H{6St1w  synchronized: 控制多个并发线程访问
K'^I^7\JAVA中文站社区门户;}M h/H`,R*zD
  ◇ 思路方法声明
] j;f"WN/A.L}c*]]  思路方法声明包括思路方法名、返回类型和外部参数其中参数类型可以是简单数据类型也可以是复合数据类型(又称引用数据类型)JAVA中文站社区门户 s"y!n{6^p

h6J MDw'f3vUs[  对于简单数据类型来说java实现是值传递思路方法接收参数但不能改变这些参数如果要改变参数则用引用数据类型引用数据类型传递给思路方法是数据在内存中地址思路方法中对数据操作可以改变数据JAVA中文站社区门户7}Dt { AV,k+o

-x7tY*o}K  例3-1介绍说明了简单数据类型和引用数据区别
6e$OQ Z0Q^l,r-p x
.\t7uH t L n`【例3-1】JAVA中文站社区门户7m O)v e1T1P
  import java.io.*;
ea2KYg#N wO  public PassTest{JAVA中文站社区门户2T-J1n pUHJK
  float ptValue;JAVA中文站社区门户2qD o9F\:?hxP}
  public void (String args) {
"p0@-~^"DCt#A   val;JAVA中文站社区门户0pa&|.PunS
  PassTest pt= PassTest;
6rK5B3m7hGMk  val=11;JAVA中文站社区门户f-Eo5D.\9{2~"?T
  .out.prln("Original Int Value is:"+val);
L#J$U;O*s!`M^  pt.changeInt(val);                   //值参数
0Z$o(|u f'D;x$|5QuA%}  .out.prln("Int Value after Change is:" +val); /*值参数JAVA中文站社区门户+osZ+Ub7go
                    值修改没有影响值参数值*/
B:SE2cd3T9n8D6o2r  pt.ptValue=101f;JAVA中文站社区门户 V5l lt*S,G%O-^
  .out.prln("Original ptValue is:"+pt.ptValue);JAVA中文站社区门户%j T:N:l w
  pt.changeObjValue(pt); //引用类型参数
e1Zzo,L&wV)XJ  .out.prln("ptValue after Change is:"+pt.ptValue);/* 引用参数值修改改变了引用参数值*/
:tI3}2J:De3l6|  }
\L^:`~;?7t1t  public void changeInt( value){
S!^j,f)u_s0W,A  value=55;            //在思路方法内部对值参数进行了修改
|FSi:eu q5YB  }
(i vK6QC1tlE7S  public void changeObjValue(PassTest ref){JAVA中文站社区门户!Zd7ta2z)\ s
  ref.ptValue=99f;        //在思路方法内部对引用参数进行了修改
z*?B`*q    }JAVA中文站社区门户~I)C*W7l4]JpW
  }JAVA中文站社区门户3[7Lm7KE K(XD2C
JAVA中文站社区门户UM6f9F9Q1I'\
   运行结果 c:\>java PassTestJAVA中文站社区门户.w0FE-DT
Original Int Value is : 11
5I SN6B8y(k0JqInt Value after Change is: 11JAVA中文站社区门户|!i"m;l(D/w
Original ptValue is: 101.0JAVA中文站社区门户iPx[X%_S
ptValue after Change is : 99.0 JAVA中文站社区门户hdx? R
JAVA中文站社区门户e zP f#D9G DV
JAVA中文站社区门户H+h8YD(k6z
JAVA中文站社区门户i{v1r.ux+kZ
  ◇ 思路方法体
PQ3iE)Y ih|B  思路方法体是对思路方法实现它包括局部变量声明以及所有合法Java指令思路方法体中声明局部变量作用域在该思路方法内部若局部变量和类成员变量同名则类成员变量被隐藏JAVA中文站社区门户,^U#V1b[
JAVA中文站社区门户,ZPO)i n0_
  例3-2 介绍说明了局部变量z和类成员变量z作用域是区别
Mt0S?D)[$Wz
"Z%U"gnp5c【例3-2】JAVA中文站社区门户h rV'U1L
  import java.io.*;JAVA中文站社区门户4Zq'd}8LCw @
   Variable{
{8G bx;o8@,T}{   x=0,y=0,z=0;              //类成员变量
tZNI'i(i  void init( x, y) {
't R-hs`Hw![2IJ  this.x=x; this.y=y;
o#KG0U-w5e]1f   z=5;                 //局部变量JAVA中文站社区门户D2lE)tn{$f-eFV(z'Bqe
  .out.prln("** in init**");JAVA中文站社区门户9V"I_3t cx%FDA
  .out.prln("x="+x+" y="+y+" z="+z);
`/D+p#yY u e!Q    } JAVA中文站社区门户NHLb%js
  }
gD?'| t@4P)e  public VariableTest{
;C {4E&]"@L h^~  public void (String args){
At2\'t }i3wJ+z  Variable v= Variable;JAVA中文站社区门户:Eq O-A!c8r}fF L\
  .out.prln("**before init**");JAVA中文站社区门户~-{I2O2egi
  .out.prln("x="+v.x+" y="+ v.y+" z="+v.z);
*O \I#Bu;SA&L  v.init(20,30);JAVA中文站社区门户9l"B.~@+Dt0]-Q_C9h2p
  .out.prln("**after init**");JAVA中文站社区门户 UH%I!cF]@,ldS
  .out.prln("x="+v.x+ " y="+ v.y+" z="+v.z);
\\-jiMI    }JAVA中文站社区门户#~ kjAjd#e
  }JAVA中文站社区门户'{[E+]k;c `3I(pY

&T+|QB"@ T#z   运行结果 JAVA中文站社区门户8g M%{#B m&JFBv

N3Gw|(?6v:o)|4I Ac:\>java VariableTest
-yp H0{8wTfp**before init**JAVA中文站社区门户(jmTp0OXE"t
x=0 y=0 z=0JAVA中文站社区门户m7gp!Opq/A"X
** in init **
tX$~(G.gfFmx=20 y=30 z=5JAVA中文站社区门户l P3DT^Tw R
**after init**
`~@0q$r8l.y3Rg p X Tx=20 y=30 z=0
^G$Wwc1j4A2s'SJQJAVA中文站社区门户q{%x ij-e(t
JAVA中文站社区门户/R*g p&C#H H9?*K!\

t$]t7H%P*HG
b9h`7eb o  上例中我们用到了this这是init思路方法参数名和类成员变量x,y名字相同而参数名会隐藏成员变量所以在思路方法中为了区别参数和类成员变量我们必须使用thisthis-----用在个思路方法中引用当前对象值是该思路方法对象返回值须和返回类型或者完全相同或是其子类当返回类型是接口时返回值必须实现该接口
4Mk6j"b4t:|E-~zJAVA中文站社区门户1T&Gg'|!Z(W J5YU
 5.思路方法重载JAVA中文站社区门户1XDz5u-y${"]?
 
o!k"Q&ci#FS  思路方法重载是指多个思路方法享有相同名字但是这些思路方法参数必须区别或者是参数个数区别或者是参数类型区别返回类型不能用来区分重载思路方法
4^9^8C+t'OiJAVA中文站社区门户~/m6}/WW2{
  参数类型区分度定要足够例如不能是同简单类型参数和long
(KvVM [GZ }JAVA中文站社区门户2mL6Wg0pa!R
【例3-3】
n6@vw0\W#z s  import java.io.*;JAVA中文站社区门户 y'y]_ Z)`
   MethodOverloading{
l X:OB{AaHp  void receive( i) {JAVA中文站社区门户*joi%Ur!r|G5]3e8]
  .out.prln("Receive _disibledevent="http://www.java-cn.com/club/?action-views-itemid-2137-page-2">>

Tags:  面向对象的特性 面向对象特性 java面向对象 java面向对象编程

延伸阅读

最新评论

发表评论