?? java8.htm
字號:
<HTML><HEAD><TITLE>Java入門</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="Microsoft FrontPage 4.0" name=GENERATOR>
<style>
<!--
A:link {text-decoration: none; color: "blue"}
A:visited {text-decoration: none; color: "#000000"}
A:active {text-decoration: none;color:"black"}
A:hover {text-decoration: underline; color: ff0000}
-->
</style>
<style type="text/css">
<!--
p{font-size:9pt;line-height;13pt;}
td { font-size: 9pt ; line-height:13pt;
}
A{text-transform: none;
text-decoration: none;font-size: 9pt ; line-height:13pt;}
-->copyright fangame
</style>
</HEAD>
<BODY bgColor=#ffffff>
<table border="1" width="100%">
<tr>
<td width="100%">
<H3>第六章 對象、類、包和接口</H3>
<P>在前面幾章中,我們對Java的簡單數據類型、數組、運算符 作了詳細的介紹。從現在開始,我們要深入到面向對象的編程
地方。本章中,我們首先講述面向對象程序設計的基本概念及 點,然后討論Java中的類、 對象、包和接口,最后進行小結,給出一個完整的Java文件的格? 。</P>
<H4>§6.1面向對象的程序設計</H4>
<P>面向過程的程序設計方法從解決問題的每一個步驟入手,? 適合于解決比較小的簡單 問題。C語言采用面向過程的程序設計模型,但是由于C本身幾?
沒有支持代碼重用的語言 結構,并且缺乏統一的接口,使得當程序的規模達到一定程度時, 程序員很難控制其復雜性 。</P>
<P>面向對象的程序設計方法則按照現實世界的特點來管理復 ?的事物,把它們抽象為對 象,具有自己的狀態和行為,通過對消息的反應來完成一定的任 ?。</P>
<P>6.1.1對象、類和消息</P>
<P>一個對象就是變量和相關的方法的集合,其中變量表明對?的狀態,方法表明對象所 具有的行為,下圖表示了一個對象的特征:</P>
<P>從圖中可以看出,一個對象的變量構成這個對象的核心,包 在它外面的方法使這個 對象和其它對象分離開來。例如:我們可以把汽車抽象為一個
象,用變量來表示它當前的 狀態,如速度、油量、型號、所處的位置等,它的行為則可以有 ?速、剎車、換擋等。我
們操縱汽車時,不用去考慮汽車內部各個零件如何運作的細節, ?只需根據汽車可能的行 為使用相應的方法即可。實際上,面向對象的程序設計實現了 對象的封裝,使我們不必
關心對象的行為是如何實現的這樣一些細節。通過對對象的? 裝,實現了模塊化和信息隱 藏,有利于程序的可移植性和安全性,同時也利于對復雜對象的 ?理。</P>
<P>對象之間必須要進行交互來實現復雜的行為。例如,要使? 車加速,必須發給它一個 消息,告訴它進行何種動作(這里是加速)以及實現這種動作所?
的參數(這里是需要達到的 速度等)。下圖表示了對象A與對象B間的消息傳遞過程。</P>
<P>從圖中可以看出,一個消息包含三個方面的內容:</P>
<P>● 消息的接收者</P>
<P>● 接收對象應采用的方法</P>
<P>● 方法所需要的參數。</P>
<P>同時,接收消息的對象在執行相應的方法后,可能會給發送 息的對象返回一些信息 (如上例中,汽車的儀表上會出現已經達到的速度等)。
由于任何一個對象的所有行為都可以用方法來描述,通過? 息機制就可以完全實現對 象之間的交互,同時,處于不同處理過程甚至不同主機的對象間 ?可以通過消息實現交互
。</P>
<P>上面所說的對象是一個具體的事物,例如每輛汽車都是一? 不同的對象。但是多個對 象常常具有一些共性,如所有的汽車都有輪子、方向盤、常具
一些共性,如所有的汽車 都有輪子、方向盤、剎車裝置等。于是我們抽象出一類對象? 共性,這就是類。類中定義 一類對象共有的變量和方法。把一個類實例化即生成該類的?
個對象。比如我們可以定 義一個汽車類來描述所有汽車的共性。通過類的定義人們可? 實現代碼的復用。我們不
用去描述每一個對象(如某輛汽車),而是通過創建類(如汽車類) ?一個實例來創建該類的一 個對象,這大大減化了軟件的設計。</P>
<P>6.1.2繼承</P>
<P>通過對象、類,我們實現了封裝,通過子類我們可以實現繼 。</P>
<P>對于上例來說,公共汽車、出租車、貨車等都是汽車,但它 是不同的汽車,除了具有 汽車的共性外,它們還具有自己的特點(如不同的操作方法,不?
的用途等)。這時我們可以 把它們作為汽車的子類來實現,它們繼承父類(汽車)的所有狀?和行為,同時增加自己的狀
態和行為。通過父類和子類,我們實現了類的的層次,可以從最 ?般的類開始,逐步特殊化 ,定義一系列的子類。同時,通過繼承也實現了代碼的復用,使
序的復雜性線性地增長,而 不是呈幾何級數增長。</P>
<P>在C++中支持多重繼承,即一個類可以繼承多個父類,這使得 象的實現變得非常復雜 且不可預料(設想多個父類擁有某些相同的變量和方法)。Java?
只支持單一繼承,大大降低 了復雜度。在Java中通過接口可以實現多重繼承,但接口的概念 ?簡單,使用更方便,而且不
僅僅限于繼承,它使多個不相關的類可以具有相同的方法。</P>
<P>6.1.3多態</P>
<P>Java通過方法重寫和方法重載來實現多態。 </P>
<P> </P>
<P>通過方法重寫,一個類中可以有多個具有相同名字的方法, ?傳遞給它們的不同個數
和類型的參數來決定使用哪種方法,這就是多態。例如,對于一和行為,同時增加自己的狀 ?作圖的類,它有一個
draw()方法用來畫圖或輸出文字,我們可以傳遞給它一個字符串 一個矩形、一個圓形,甚 至還可以再指定作圖的初始位置、圖形的顏色等,對于每一種
現,只需實現一個新的 draw()方法即可,而不需要新起一個名字,這樣大大簡化了方法? 實現和調用,程序員和用戶
都不需要記住很多的方法名,只需要傳入相應的參數即可。 通過方法重載,子類可以重新實現父類的某些方法,使其具 自己的特征。例如對于
汽車類的加速方法,其子類(如賽車)中可能增加了一些新的部? 來改善提高加速性能,這時 可以在賽車類中重載父類的加速方法。重載隱藏了父類的方?
,使子類擁有自己具體實現 ,更進一步表明了與父類相比,子類所具有的特殊性。</P>
<P>本節中,我們對面向對象程序設計的一些基本內容作了講? ,下面我們就分別講述 Java是如何實現這些內容的。</P>
<H4>§6.2類</H4>
<P>類是組成Java程序的基本要素。它封裝了一類對象的狀態? 方法,是這一類對象的原 型。在前幾章的例子中,我們已經定義了一些簡單的類,如Helloo
rldApp類。</P>
<P>public class HelloWorldApp{</P>
<P>public static void main(String args[]){</P>
<P>System.out.println("Hello World!");</P>
<P>}</P>
<P>}</P>
<P>可以看出,一個類的實現包含兩部分的內容:</P>
<P>classDeclaration{</P>
<P>classBody</P>
<P>}</P>
<P>下面我們分別對每一部分詳細講述。</P>
<P>6.2.1類聲明</P>
<P>一個最簡單的類聲明如下:</P>
<P>class className{</P>
<P>……</P>
<P>}</P>
<P>例如:</P>
<P>class Point{</P>
<P>……</P>
<P>}</P>
<P>同時,在類聲明中還可以包含類的父類,類所實現的接口以 修飾符public、abstract或 final。 我們將分別在后面的幾節中介紹。</P>
<P>6.2.2類體</P>
<P>類體中定義了該類所有的變量和該類所支持的方法。通常 ?量在方法前定義(并不一 定要求),如下所示:</P>
<P>class className{</P>
<P>memberVariableDeclarations</P>
<P>methodDeclarations</P>
<P>}</P>
<P>下例定義了一個Point類,并且聲明了它的兩個變量x、y坐標, ?時實現init()方法對x、y賦 初值。</P>
<P>例6.1</P>
<P>class Ponit{</P>
<P>int x,y;</P>
<P>void init(int ix,int iy){</P>
<P>x=ix;</P>
<P>y=iy;</P>
<P>}</P>
<P>}</P>
<P>類中所定義的變量和方法都是類的成員。對類的成員可以 ?定訪問權限,來限定其它
對象對它的訪問,訪問權限所以有以下幾種:private,protected,pubic,friendly。我們將在§6.6中詳細 討論。</P>
<P>同時,對類的成員來說,又可以分為實例成員和類成員兩種 我們在§6.8中詳細討論。</P>
<P>6.2.3成員變量</P>
<P>最簡單的成員變量的聲明為:</P>
<P>typevariableName;</P>
<P>如在例6.1中所聲明的變量,intx,y;</P>
<P>成員變量的類型可以是Java中的任意數據類型包括簡單類? 、數組、類和接口。在一 個類中,成員變量應該是唯一的,但是成員變量的名字可以和類
?某個方法的名字相同,例 如:</P>
<P>class Point{</P>
<P>int x,y;</P>
<P>int x(){</P>
<P>return x;</P>
<P>}</P>
<P>}</P>
<P>其中,方法x()和變量x具有相同的名字。</P>
<P>類的成員變量和在方法中所聲明的局部變量是不同的,成? 變量的作用域是整個類 ,而局部變量的作用域只是方法內部。
對一個成員變量,我們還可以限定它的訪問權限(見§6.6),? static限定它為類變量(見§ 6.7),或者用以下的修飾符限定:</P>
<P>final:用來聲明一個常量,如:</P>
<P>class FinalVar{</P>
<P>final int CONSTANT=50;</P>
<P>……</P>
<P>}</P>
<P>例中聲明了常量CONSTANT,并賦值為50。對于用final限定的常 ,在程序中不能改變它 的值。通常常量名用大寫字母。</P>
<p><a href="grade2.asp.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/grade2.asp.htm">目錄</a>
<ul>
<li><a HREF="java1.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java1.htm">Java入門(一)</a></li>
<li><a HREF="java2.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java2.htm" >Java入門(二)</a></li>
<li><a HREF="java3.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java3.htm">Java入門(三)</a></li>
<li><a HREF="java4.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java4.htm">Java入門(四)</a></li>
<li><a HREF="java5.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java5.htm">Java入門(五)</a></li>
<li><a HREF="java6.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java6.htm">Java入門(六)</a></li>
<li><a HREF="java7.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java7.htm">Java入門(七)</a></li>
<li><a HREF="java8.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java8.htm">Java入門(八)</a></li>
<li><a HREF="java9.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java9.htm">Java入門(九)</a></li>
</ul>
</td>
</tr>
</table>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -