28    存取權限控制

存取權限可區分為Class的存取權限及Class成員的存取權限。Class的成員包括欄位(field)與方法(method),欄位之基本資料型別及參考資料型別皆包含在內。存取權限有publicprotectedpackage access(沒有指定時)private四種,指定方法為置於定義之最前方。

[28-1 Class的存取權限]

Class的權限種類有publicpackage access(不指定時)兩種。權限修飾子指定public時,為其他class不論有無繼承關係、是否為同一package皆可來存取,也就是產生其物件。省略權限修飾子即為package access,也就是同一package內之其他class方可來存取,沒有設定package但在同一目錄內的class,視為同一package,即預設(default)package ,享有package access 之權限。classprivateprotected權限,不讓其他class來存取(產生物件)時,就必須將建構式宣告為private,不過卻可以靜態方法(static method)來產生物件。存取權限所指稱的Class皆是指編譯過後之.class檔而言,且是指被存取者,與存取者的權限無關。往下閱讀前可先參考「表28-1 Class存取權限」

[28-1-1 Classpublic權限]

祈泊 發表在 痞客邦 留言(0) 人氣()

圖27-1 類別繼承體系例

27   多型(Polymorphism)

多型(polymorphism)是物件導向程式語言的三個重要特徵之一,其他兩個是資料抽象化(data abstraction)及繼承(inheritance)

多型是指在繼承體系之下,某一物件能以其自身型別視之,亦可以其基礎型別(base type)視之。亦即能在同一繼承體系之下,將多個型別視為同一型別。所謂基礎型別即為父類別、父類別的父類別或是父類別的父類別的父類別、…等。這種將某個object reference視為一個reference to base type的動作,稱為向上轉型(upcasting),因為在繼承體系圖中,基礎型別總是畫在上方。

如上圖之類別繼承體系例,D1類別之物件可視為本身D1類別之型別,亦可視為父類別C1B1A之型別,B2類別可視為本身B2類別之型別,亦可視為父類別A之型別。上圖各類別可被轉換之型別如下表:

27-1 可轉換型別

祈泊 發表在 痞客邦 留言(0) 人氣()

圖26-1

26   多變的變數

變數(Variable)基本上可當作資料(Data)、欄位(Field)、屬性(Attribute),甚至是參數(Parameter)、引數(argument)來看,視使用場合而定。

變數有各種分類:

(1)基本資料型別變數與參考資料型別變數

(2)物件變數與類別變數(實體變數與靜態變數)

祈泊 發表在 痞客邦 留言(3) 人氣()

圖 25-1各環境變數、引數關係圖

25   環境變數及命令列變數、選項引數設定

之前於「開發環境」章節中已簡單說明過環境變數,但環境變數及其引數甚為繁雜,特闢專章說明,主要以Windows 7為例。

Windows 710可進入[控制台] ->[系統及安全性]->[系統]->[進階]->[環境變數]新增環境變數或編輯現有環境變數,選擇user的使用者環境變數時,效用僅限於該使用者,如選擇系統環境變數,則適用於全部使用者。

環境變數有PATHCLASSPATH等,並有命令列選項引數-sourcepath-d,其關係圖如下,功能及使用方式詳述如後。

[25-1 PATH環境變數]

祈泊 發表在 痞客邦 留言(0) 人氣()

24   例外處理(Exception handling)-2

[24-1內建例外處理類別的訊息]

[getMessage()方法]

內建例外處理類別的簡單訊息可經由個別例外類別的getMessage()方法取得。getMessage()方法只取得訊息,可以System.out.println等顯示。

[]

祈泊 發表在 痞客邦 留言(0) 人氣()

圖23-1

23   例外處理(Exception handling)-1

撰寫Java原始碼、編譯並執行,期間會碰到各種問題,有些屬於程式語法錯誤、程式邏輯錯誤,有些屬於作業系統、硬體錯誤等。這些錯誤有些必須在程式中預作處置,有些則非程式可以控制的。

如果只以Java程式本身的問題來分類,可分為編譯時期的錯誤、執行時期的錯誤及程式邏輯錯誤。

[編譯期錯誤]

Java編譯時出現(或發現)的錯誤,例如程式碼拼字錯誤、語法錯誤及後述的Checked Exception等屬之。因為這些錯誤造成程式無法完成編譯,當然也就不能執行了。

祈泊 發表在 痞客邦 留言(0) 人氣()

圖22-1

22   從抽象類別(Abstract Class)介面(Interface)

[22-1抽象類別(Abstract Class)]

在前面章節已說明過,不描述處理內容,只定義呼叫方式的方法,稱為抽象方法(abstract method)。而擁有抽象方法的類別就是抽象類別(abstract class)。抽象類別不能建立物件,需經繼承並覆寫抽象方法,才可建立物件。類別如包含多個方法,只要其中一個為抽象方法,此類別就成為抽象類別。類別被定義為抽象類別,但其方法可全部不為抽象方法。

抽象類別可宣告欄位。

[22-1-1只含抽象方法的抽象類別]

祈泊 發表在 痞客邦 留言(0) 人氣()

圖21-1繼承圖示

21   繼承及相關之修飾子、關鍵字

依據民法的親屬˙繼承篇,繼承者頂多只能獨得或均分被繼承者的所有財產,甚至還會被課一大筆遺產稅,繼承之後,被繼承者的財產就轉移了,換了個所有者。但Java的類別就不同了,除了得到被繼承類別的所有功能之外,還可自行修改及增添功能,當然也有一些不能達到所有原功能的一些限制,且原類別還存在,還可很博愛的被繼承。這大概也是Java的繼承關鍵字不使用inherits,而使用extends的關係吧!

[21-1父類別與子類別]

繼承是將類別的成員傳承給其他類別,可以多層的一直繼承下去,對被繼承(傳承)的類別稱為父類別(有時也稱為super類別、base類別),繼承(被傳承)的類別稱為子類別。所有類別的根源類別,也就是最頂端的類別為Object,任何沒有extends關鍵字指名繼承的類別,都是繼承自Object類別。

繼承使用extends關鍵字。

祈泊 發表在 痞客邦 留言(0) 人氣()

圖20-1

20   套件(Package)

Java程式編譯時如無命令列-d選項引數指定位元碼檔(.class)存放目錄(資料夾),將和原始碼檔(.java)並存於同一資料夾,且有可能所有程式之原始碼檔、位元碼檔都混在一起。為了將同一組功能的程式(例如人事系統、銷售系統等)同放在一個資料夾,以資和其他功能的程式作區別,雖然單單使用-d選項引數也可達到目的,但使用套件(Package或稱為包裹)之功能,則更見效率。

套件另一功用為防止相同的類別名稱造成的問題,不同之功能但具相同的類別名稱,可分別歸類為不同的套件,即可防止類別誤用。當然也可能兩個人都定相同的套件名稱,解決之道是以個人的域名反置作為套件名稱的一部分。

套件名稱習慣上使用小寫字母。

<套件設定格式>

祈泊 發表在 痞客邦 留言(0) 人氣()

圖19-1

19   Java的程式檔構成

[19-1 Java的程式檔]

目前為止我們看到的Java程式檔有兩種,存放原始碼的檔案及存放位元碼的檔案。原始碼檔以「記事本」編輯,須指定副檔名為.java;原始碼經編譯後成為位元碼檔,副檔名自動生成為.class

[19-2類別與原始碼檔、位元碼檔]

類別(class)

祈泊 發表在 痞客邦 留言(0) 人氣()

18   特殊的方法-建構式(Constructor)

建構式有稱為建構子者,為當物件建立時會自動被呼叫的特殊方法,建構式名稱必須和類別名稱相同。

建構式無回傳值型別,亦即無須void宣告及return敘述。

<一般方法之呼叫>

class Gms {                        

祈泊 發表在 痞客邦 留言(0) 人氣()

17   類別(2)-類別的修飾子

[17-1類別(Class)的修飾子]

class關鍵字之前的publicabstractfinal稱為修飾子。

格式:

[ public|abstract|final ] class 類別名稱 {

祈泊 發表在 痞客邦 留言(0) 人氣()

1 2 3
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。