程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 對象、類、包和接口

對象、類、包和接口

編輯:關於JAVA

在 前 面 幾 章 中 ,我 們 對 Java的 簡 單 數 據 類 型 、 數 組 、 運 算 符 和 表 達 式 以 及 流 控 制 方 法

  作 了 詳 細 的 介 紹 。 從 現 在 開 始 ,我 們 要 深 入 到 面 向 對 象 的 編 程 技 術 ,深 入 到 Java最 吸 引 人 的

  地 方 。 本 章 中 ,我 們 首 先 講 述 面 向 對 象 程 序 設 計 的 基 本 概 念 及 特 點 ,然 後 討 論 Java中 的 類 、

  對 象 、 包 和 接 口 ,最 後 進 行 小 結 ,給 出 一 個 完 整 的 Java文 件 的 格 式 。

  

  § 6.1 面 向 對 象 的 程 序 設 計

  

  面 向 過 程 的 程 序 設 計 方 法 從 解 決 問 題 的 每 一 個 步 驟 入 手 ,它 適 合 於 解 決 比 較 小 的 簡 單

  問 題 。 C語 言 采 用 面 向 過 程 的 程 序 設 計 模 型 ,但 是 由 於 C本 身 幾 乎 沒 有 支 持 代 碼 重 用 的 語 言

  結 構 ,並 且 缺 乏 統 一 的 接 口 ,使 得 當 程 序 的 規 模 達 到 一 定 程 度 時 ,程 序 員 很 難 控 制 其 復 雜 性

  。

  

  面 向 對 象 的 程 序 設 計 方 法 則 按 照 現 實 世 界 的 特 點 來 管 理 復 雜 的 事 物 ,把 它 們 抽 象 為 對

  象 ,具 有 自 己 的 狀 態 和 行 為 ,通 過 對 消 息 的 反 應 來 完 成 一 定 的 任 務 。

  

  6.1.1 對 象 、 類 和 消 息

  

  一 個 對 象 就 是 變 量 和 相 關 的 方 法 的 集 合 ,其 中 變 量 表 明 對 象 的 狀 態 ,方 法 表 明 對 象 所

  具 有 的 行 為 ,下 圖 表 示 了 一 個 對 象 的 特 征 :

  

  從 圖 中 可 以 看 出 ,一 個 對 象 的 變 量 構 成 這 個 對 象 的 核 心 ,包 圍 在 它 外 面 的 方 法 使 這 個

  對 象 和 其 它 對 象 分 離 開 來 。 例 如 :我 們 可 以 把 汽 車 抽 象 為 一 個 對 象 ,用 變 量 來 表 示 它 當 前 的

  狀 態 ,如 速 度 、 油 量 、 型 號 、 所 處 的 位 置 等 ,它 的 行 為 則 可 以 有 加 速 、 剎 車 、 換 擋 等 。 我

  們 操 縱 汽 車 時 ,不 用 去 考 慮 汽 車 內 部 各 個 零 件 如 何 運 作 的 細 節 ,而 只 需 根 據 汽 車 可 能 的 行

  為 使 用 相 應 的 方 法 即 可 。 實 際 上 ,面 向 對 象 的 程 序 設 計 實 現 了 對 對 象 的 封 裝 ,使 我 們 不 必

  關 心 對 象 的 行 為 是 如 何 實 現 的 這 樣 一 些 細 節 。 通 過 對 對 象 的 封 裝 ,實 現 了 模 塊 化 和 信 息 隱

  藏 ,有 利 於 程 序 的 可 移 植 性 和 安 全 性 ,同 時 也 利 於 對 復 雜 對 象 的 管 理 。

  

  對 象 之 間 必 須 要 進 行 交 互 來 實 現 復 雜 的 行 為 。 例 如 ,要 使 汽 車 加 速 ,必 須 發 給 它 一 個

  消 息 ,告 訴 它 進 行 何 種 動 作 (這 裡 是 加 速 )以 及 實 現 這 種 動 作 所 需 的 參 數 (這 裡 是 需 要 達 到 的

  速 度 等 )。 下 圖 表 示 了 對 象 A與 對 象 B間 的 消 息 傳 遞 過 程 。

  

  從 圖 中 可 以 看 出 ,一 個 消 息 包 含 三 個 方 面 的 內 容 :

  

  ●   消 息 的 接 收 者

  

  ●   接 收 對 象 應 采 用 的 方 法

  

  ●   方 法 所 需 要 的 參 數 。

  

  同 時 ,接 收 消 息 的 對 象 在 執 行 相 應 的 方 法 後 ,可 能 會 給 發 送 消 息 的 對 象 返 回 一 些 信 息

  (如 上 例 中 ,汽 車 的 儀 表 上 會 出 現 已 經 達 到 的 速 度 等 )。

  

  由 於 任 何 一 個 對 象 的 所 有 行 為 都 可 以 用 方 法 來 描 述 ,通 過 消 息 機 制 就 可 以 完 全 實 現 對

  象 之 間 的 交 互 ,同 時 ,處 於 不 同 處 理 過 程 甚 至 不 同 主 機 的 對 象 間 也 可 以 通 過 消 息 實 現 交 互

  。

  

  上 面 所 說 的 對 象 是 一 個 具 體 的 事 物 ,例 如 每 輛 汽 車 都 是 一 個 不 同 的 對 象 。 但 是 多 個 對

  象 常 常 具 有 一 些 共 性 ,如 所 有 的 汽 車 都 有 輪 子 、 方 向 盤 、 常 具 有 一 些 共 性 ,如 所 有 的 汽 車

  都 有 輪 子 、 方 向 盤 、 剎 車 裝 置 等 。 於 是 我 們 抽 象 出 一 類 對 象 的 共 性 ,這 就 是 類 。 類 中 定 義

  一 類 對 象 共 有 的 變 量 和 方 法 。 把 一 個 類 實 例 化 即 生 成 該 類 的 一 個 對 象 。 比 如 我 們 可 以 定

  義 一 個 汽 車 類 來 描 述 所 有 汽 車 的 共 性 。 通 過 類 的 定 義 人 們 可 以 實 現 代 碼 的 復 用 。 我 們 不

  用 去 描 述 每 一 個 對 象 (如 某 輛 汽 車 ),而 是 通 過 創 建 類 (如 汽 車 類 )的 一 個 實 例 來 創 建 該 類 的 一

  個 對 象 ,這 大 大 減 化 了 軟 件 的 設 計 。

  

  6.1.2 繼 承

  

  通 過 對 象 、 類 ,我 們 實 現 了 封 裝 ,通 過 子 類 我 們 可 以 實 現 繼 承 。

  

  對 於 上 例 來 說 ,公 共 汽 車 、 出 租 車 、 貨 車 等 都 是 汽 車 ,但 它 們 是 不 同 的 汽 車 ,除 了 具 有

  汽 車 的 共 性 外 ,它 們 還 具 有 自 己 的 特 點 (如 不 同 的 操 作 方 法 ,不 同 的 用 途 等 )。 這 時 我 們 可 以

  把 它 們 作 為 汽 車 的 子 類 來 實 現 ,它 們 繼 承 父 類 (汽 車 )的 所 有 狀 態 和 行 為 ,同 時 增 加 自 己 的 狀

  態 和 行 為 。 通 過 父 類 和 子 類 ,我 們 實 現 了 類 的 的 層 次 ,可 以 從 最 一 般 的 類 開 始 ,逐 步 特 殊 化

  ,定 義 一 系 列 的 子 類 。 同 時 ,通 過 繼 承 也 實 現 了 代 碼 的 復 用 , 使 程 序 的 復 雜 性 線 性 地 增 長 ,而

  不 是 呈 幾 何 級 數 增 長 。

  

  在 C++中 支 持 多 重 繼 承 ,即 一 個 類 可 以 繼 承 多 個 父 類 ,這 使 得 對 象 的 實 現 變 得 非 常 復 雜

  且 不 可 預 料 (設 想 多 個 父 類 擁 有 某 些 相 同 的 變 量 和 方 法 )。 Java則 只 支 持 單 一 繼 承 ,大 大 降 低

  了 復 雜 度 。 在 Java中 通 過 接 口 可 以 實 現 多 重 繼 承 ,但 接 口 的 概 念 更 簡 單 ,使 用 更 方 便 ,而 且 不

  僅 僅 限 於 繼 承 ,它 使 多 個 不 相 關 的 類 可 以 具 有 相 同 的 方 法 。

  

  6.1.3 多 態

  

  Java通 過 方 法 重 寫 和 方 法 重 載 來 實 現 多 態 。

  

  通 過 方 法 重 寫 ,一 個 類 中 可 以 有 多 個 具 有 相 同 名 字 的 方 法 , 由 傳 遞 給 它 們 的 不 同 個 數

  和 類 型 的 參 數 來 決 定 使 用 哪 種 方 法 ,這 就 是 多 態 。 例 如 ,對 於 一 個 作 圖 的 類 ,它 有 一 個

  draw()方 法 用 來 畫 圖 或 輸 出 文 字 ,我 們 可 以 傳 遞 給 它 一 個 字 符 串 、 一 個 矩 形 、 一 個 圓 形 ,甚

  至 還 可 以 再 指 定 作 圖 的 初 始 位 置 、 圖 形 的 顏 色 等 ,對 於 每 一 種 實 現 ,只 需 實 現 一 個 新 的

  draw()方 法 即 可 ,而 不 需 要 新 起 一 個 名 字 , 這 樣 大 大 簡 化 了 方 法 的 實 現 和 調 用 ,程 序 員 和 用 戶

  都 不 需 要 記 住 很 多 的 方 法 名 ,只 需 要 傳 入 相 應 的 參 數 即 可 。

  

  通 過 方 法 重 載 ,子 類 可 以 重 新 實 現 父 類 的 某 些 方 法 ,使 其 具 有 自 己 的 特 征 。 例 如 對 於

  汽 車 類 的 加 速 方 法 ,其 子 類 (如 賽 車 )中 可 能 增 加 了 一 些 新 的 部 件 來 改 善 提 高 加 速 性 能 ,這 時

  可 以 在 賽 車 類 中 重 載 父 類 的 加 速 方 法 。 重 載 隱 藏 了 父 類 的 方 法 ,使 子 類 擁 有 自 己 具 體 實 現

  ,更 進 一 步 表 明 了 與 父 類 相 比 ,子 類 所 具 有 的 特 殊 性 。

  

  本 節 中 ,我 們 對 面 向 對 象 程 序 設 計 的 一 些 基 本 內 容 作 了 講 解 ,下 面 我 們 就 分 別 講 述

  Java是 如 何 實 現 這 些 內 容 的 。

  

  § 6.2 類

  

  類 是 組 成 Java程 序 的 基 本 要 素 。 它 封 裝 了 一 類 對 象 的 狀 態 和 方 法 ,是 這 一 類 對 象 的 原

  型 。 在 前 幾 章 的 例 子 中 ,我 們 已 經 定 義 了 一 些 簡 單 的 類 ,如 Hellowo rldApp類 。

  

  public class HelloWorldApp{

  public static void main( String args[ ] ){

  System.out.println("Hello World !");

  }

  }

  可以看出,一個類的實現包含兩部分的內容:

  classDeclaration {

  classBody

  }

  

  下 面 我 們 分 別 對 每 一 部 分 詳 細 講 述 。

  

  6.2.1 類 聲 明

  

  一 個 最 簡 單 的 類 聲 明 如 下 :

  

  class className {

  ……

  }

  例如:

  class Point{

  ……

  }

  

  同 時 ,在 類 聲 明 中 還 可 以 包 含 類 的 父 類 ,類 所 實 現 的 接 口 以 及 修 飾 符 public、 abstract或

  final。   我 們 將 分 別 在 後 面 的 幾 節 中 介 紹 。

  

  6.2.2 類 體

  

  類 體 中 定 義 了 該 類 所 有 的 變 量 和 該 類 所 支 持 的 方 法 。 通 常 變 量 在 方 法 前 定 義 (並 不 一

  定 要 求 ),如 下 所 示 :

  

  class className {

  memberVariableDeclarations

  methodDeclarations

  }

  

  下 例 定 義 了 一 個 Point類 ,並 且 聲 明 了 它 的 兩 個 變 量 x、 y坐 標 ,同 時 實 現 init()方 法 對 x、 y賦

  初 值 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved