Submit Search
Upload
物件封裝
•
1 like
•
1,108 views
Justin Lin
Follow
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
Read less
Read more
Technology
Report
Share
Report
Share
1 of 74
Download now
Download to read offline
Recommended
認識物件
認識物件
Justin Lin
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
進階主題
進階主題
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
從模組到類別
從模組到類別
Justin Lin
深入模組管理 初識物件導向 學習定義類別 定義運算子
反射與類別載入器
反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 認識模組與反射的權限設定 瞭解JDK9類別載入器階層 使用ClassLoader實例
5. 從模組到類別
5. 從模組到類別
Justin Lin
深入模組管理 初識物件導向 學習定義類別 定義運算子
14. 進階主題
14. 進階主題
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
資料永續與交換
資料永續與交換
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
認識建構式之作用 理解原型鏈機制 區別原型與類別典範 善用類別語法
Recommended
認識物件
認識物件
Justin Lin
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
進階主題
進階主題
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
從模組到類別
從模組到類別
Justin Lin
深入模組管理 初識物件導向 學習定義類別 定義運算子
反射與類別載入器
反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 認識模組與反射的權限設定 瞭解JDK9類別載入器階層 使用ClassLoader實例
5. 從模組到類別
5. 從模組到類別
Justin Lin
深入模組管理 初識物件導向 學習定義類別 定義運算子
14. 進階主題
14. 進階主題
Justin Lin
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
資料永續與交換
資料永續與交換
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
認識建構式之作用 理解原型鏈機制 區別原型與類別典範 善用類別語法
11. DOM、事件與樣式
11. DOM、事件與樣式
Justin Lin
認識DOM操作 處理事件 掌握樣式 建立程式庫封裝細節
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
進階主題
進階主題
Justin Lin
《Python 3.5 技術手冊》第 14 章投影片
從模組到類別
從模組到類別
Justin Lin
《Python 3.5 技術手冊》第 5 章投影片
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 認識模組與反射的權限設定 瞭解JDK9類別載入器階層 使用ClassLoader實例
10. 進入瀏覽器
10. 進入瀏覽器
Justin Lin
script標籤基本特性 認識async與defer 初探同源策略與CORS 認識ES6前的模組管理 使用ECMAScript模組
9. 資料結構
9. 資料結構
Justin Lin
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
CH04:認識物件
CH04:認識物件
Justin Lin
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性 知道如何查詢API文件
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
Java SE 7 技術手冊
4. 使用物件
4. 使用物件
Justin Lin
掌握this參考 運用物件實字 認識物件協定 使用符號協定
CH16:整合資料庫
CH16:整合資料庫
Justin Lin
了解JDBC架構 使用JDBC API 瞭解交易與隔離層級 認識RowSet
深入模組化
深入模組化
Justin Lin
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
CH09:Collection與Map
CH09:Collection與Map
Justin Lin
認識Collection與Map架構 使用Collection與Map實作 對收集之物件進行排序 簡介Lambda表示式 簡介泛型語法
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
Java SE 7 技術手冊
9. meta-programming
9. meta-programming
Justin Lin
探索物件特性 判斷物件型態 認識Reflect API 結合Proxy與Reflect API
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 瞭解JDK類別載入器階層 使用ClassLoader實例
Python面向对象开发基础篇
Python面向对象开发基础篇
modou li
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
ArBing Xie
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊
CH05:物件封裝
CH05:物件封裝
Justin Lin
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
More Related Content
What's hot
11. DOM、事件與樣式
11. DOM、事件與樣式
Justin Lin
認識DOM操作 處理事件 掌握樣式 建立程式庫封裝細節
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
進階主題
進階主題
Justin Lin
《Python 3.5 技術手冊》第 14 章投影片
從模組到類別
從模組到類別
Justin Lin
《Python 3.5 技術手冊》第 5 章投影片
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 認識模組與反射的權限設定 瞭解JDK9類別載入器階層 使用ClassLoader實例
10. 進入瀏覽器
10. 進入瀏覽器
Justin Lin
script標籤基本特性 認識async與defer 初探同源策略與CORS 認識ES6前的模組管理 使用ECMAScript模組
9. 資料結構
9. 資料結構
Justin Lin
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
CH04:認識物件
CH04:認識物件
Justin Lin
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性 知道如何查詢API文件
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
Java SE 7 技術手冊
4. 使用物件
4. 使用物件
Justin Lin
掌握this參考 運用物件實字 認識物件協定 使用符號協定
CH16:整合資料庫
CH16:整合資料庫
Justin Lin
了解JDBC架構 使用JDBC API 瞭解交易與隔離層級 認識RowSet
深入模組化
深入模組化
Justin Lin
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
CH09:Collection與Map
CH09:Collection與Map
Justin Lin
認識Collection與Map架構 使用Collection與Map實作 對收集之物件進行排序 簡介Lambda表示式 簡介泛型語法
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
Java SE 7 技術手冊
9. meta-programming
9. meta-programming
Justin Lin
探索物件特性 判斷物件型態 認識Reflect API 結合Proxy與Reflect API
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
取得.class檔案資訊 動態生成物件與操作方法 瞭解JDK類別載入器階層 使用ClassLoader實例
Python面向对象开发基础篇
Python面向对象开发基础篇
modou li
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
ArBing Xie
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
Java SE 7 技術手冊
What's hot
(20)
11. DOM、事件與樣式
11. DOM、事件與樣式
10. 資料永續與交換
10. 資料永續與交換
進階主題
進階主題
從模組到類別
從模組到類別
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
CH17:反射與類別載入器
CH17:反射與類別載入器
10. 進入瀏覽器
10. 進入瀏覽器
9. 資料結構
9. 資料結構
CH04:認識物件
CH04:認識物件
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
4. 使用物件
4. 使用物件
CH16:整合資料庫
CH16:整合資料庫
深入模組化
深入模組化
CH09:Collection與Map
CH09:Collection與Map
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
9. meta-programming
9. meta-programming
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Python面向对象开发基础篇
Python面向对象开发基础篇
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Similar to 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊
CH05:物件封裝
CH05:物件封裝
Justin Lin
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
14 Saving Loading and Application States
14 Saving Loading and Application States
Tom Fan
保存,加载和程序状态
2016.8.1 Design Pattern Eric
2016.8.1 Design Pattern Eric
柏亨 盧
I wish it will help you
Javascript进阶编程
Javascript进阶编程
iflytek
讲述javascript面向对象编程的一些要点
Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
PM讀書會_精實執行
PM讀書會_精實執行
Gary Hsia
「PM讀書會」為「產品經理菁英會(PMEG)」的子社團,成立的目的有二: 1.鼓勵成員讀書,厚實知識能量,以成為專業PM為己任。 2.鼓勵知識分享,線上線下交流,以成為產業專家為目標。
CH10:輸入輸出
CH10:輸入輸出
Justin Lin
瞭解串流與輸入輸出 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用輸入輸出裝飾器
Linux File system
Linux File system
Kenny (netman)
Linux 檔案系統基本運作原理,LVM,Soft RAID,以及檔案系統應用。
Introduction to big data
Introduction to big data
邦宇 叶
Introduction to big data
Word press theme主题制作教程
Word press theme主题制作教程
pangyuxing
以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計
Amigo 陳兆祥
採用 RESTful Web API 架構可以大幅節省網路傳輸,與使用者更新頁面的時間。但是該從何開始呢?我們將以分別示範與說明前端與後端的程式碼,透過 AJAX 與 Post 呼叫後端 RESTful API,從範例中分享實作經驗。
How to-become-ocm1
How to-become-ocm1
xiaoshi100a
OCM
Semp活动 敏捷之用户故事研讨会(二)
Semp活动 敏捷之用户故事研讨会(二)
Mike Li
Semp活动 敏捷之用户故事研讨会(二)
Semp活动 敏捷之用户故事研讨会(二)
SEMP
敏捷的估算和计划 Agile Estimating & Planning
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
Java SE 7 技術手冊
Chapter 4 models
Chapter 4 models
Ekman Hsieh
Django讀書會
Php study.20130110
Php study.20130110
bngoogle
ABOUT php study.
The clean coder
The clean coder
Andy Cheng
The clean coder 讀書心得
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
這個投影片是搭配《Java Tutorial》課程,你可以在 CodeData 上看到所有內容,也可以直接在 Google Play 或 Pubu 上搜尋 "Java Tutorial" 以購得電子書。
Similar to 物件封裝
(20)
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
CH05:物件封裝
CH05:物件封裝
14 Saving Loading and Application States
14 Saving Loading and Application States
2016.8.1 Design Pattern Eric
2016.8.1 Design Pattern Eric
Javascript进阶编程
Javascript进阶编程
Java Build Tool course in 2011
Java Build Tool course in 2011
PM讀書會_精實執行
PM讀書會_精實執行
CH10:輸入輸出
CH10:輸入輸出
Linux File system
Linux File system
Introduction to big data
Introduction to big data
Word press theme主题制作教程
Word press theme主题制作教程
以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計
How to-become-ocm1
How to-become-ocm1
Semp活动 敏捷之用户故事研讨会(二)
Semp活动 敏捷之用户故事研讨会(二)
Semp活动 敏捷之用户故事研讨会(二)
Semp活动 敏捷之用户故事研讨会(二)
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Chapter 4 models
Chapter 4 models
Php study.20130110
Php study.20130110
The clean coder
The clean coder
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
More from Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch04 會話管理
Ch04 會話管理
Justin Lin
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
認識並行、平行與非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
11. 常用內建模組
11. 常用內建模組
Justin Lin
處理日期與時間 認識日誌的使用 運用規則表示式 管理檔案與目錄 URL 處理
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
7. 例外處理
7. 例外處理
Justin Lin
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
6. 類別的繼承
6. 類別的繼承
Justin Lin
瞭解繼承目的 認識鴨子定型 重新定義方法 認識 object 建立、尋找文件資源 泛型入門
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
13.並行、平行與非同步
13.並行、平行與非同步
12. 除錯、測試與效能
12. 除錯、測試與效能
11. 常用內建模組
11. 常用內建模組
8. open() 與 io 模組
8. open() 與 io 模組
7. 例外處理
7. 例外處理
6. 類別的繼承
6. 類別的繼承
物件封裝
1.
1
2.
物件封裝 學習目標 • 瞭解封裝觀念與實現 • 定義類別、建構式與方法 •
使用方法重載與不定長度引數 • 瞭解static成員 2
3.
封裝物件初始流程 • 假設你要寫個可以管理儲值卡的應用程式 … 3
4.
封裝物件初始流程 • 你的朋友要建立5張儲值卡的資料: 4
5.
封裝物件初始流程 • 你發現到每次他在建立儲值卡物件時,都會 作相同的初始動作 … •
在程式中出現重複的流程,往往意謂著有改 進的空間 … 5
6.
封裝物件初始流程 • 可以定義建構式(Constructor)來改進這個 問題: 6
7.
封裝物件初始流程 • 在你重新編譯CashCard.java為CashCard.class 之後,交給你的朋友 … 7
8.
封裝物件初始流程 • 他應該會想寫哪個程式片段? • 你封裝了什麼? –
你用了建構式語法,實現物件初始化流程的封裝 • 封裝物件初始化流程有什麼好處? – 拿到CashCard類別的使用者,不用重複撰寫物件初始化 流程,事實上,他也不用知道物件如何初始化 – 就算你修改了建構式的內容,重新編譯並給予位元碼檔 案之後,CashCard類別的使用者也無需修改程式 8
9.
封裝物件操作流程 • 你的朋友使用CashCard建立3個物件,並要 再對所有物件進行儲值的動作: 9
10.
10
11.
封裝物件操作流程 • 那些儲值的流程重複了 • 儲值應該是CashCard物件自己處理 •
可以定義方法(Method)來解決這個問題 11
12.
12
13.
封裝物件操作流程 • 使用CashCard的使用者,現在可以這麼撰 寫了: 13
14.
封裝物件操作流程 • 相較於先前得撰寫重複流程,CashCard使 用者應該會比較想寫這個吧! • 你封裝了什麼呢? –
你封裝了儲值的流程。哪天你也許考慮每加值 1000元就增加一點紅利,而不像現在就算加值 5000元也只有一點紅利,就算改變了store()的 流程,CashCard使用者也無需修改程式。 14
15.
封裝物件內部資料 • 你「希望」使用者如下撰寫程式 … •
你的希望完全就是一廂情願,因為 CashCard使用者還是可以如下撰寫程式, 跳過你的相關條件檢查: 15
16.
封裝物件內部資料 • 你沒有封裝CashCard中不想讓使用者直接 存取的私有資料, • 如果有些資料是類別所私有,可以使用 private關鍵字定義 16
17.
封裝物件內部資料 17
18.
封裝物件內部資料 • 編譯器會讓使用者在直接存取number、 balance與bonus時編譯失敗: 18
19.
封裝物件內部資料 • 如果沒辦法直接取得number、balance與 bonus,那這段程式碼怎麼辦? 19
20.
封裝物件內部資料 • 基於你的意願,CashCard類別上定義了 getNumber()、getBalance()與 getBonus()等取值方法 20
21.
封裝物件內部資料 • 你封裝了什麼? – 封裝了類別私有資料,讓使用者無法直接存取, 而必須透過你提供的操作方法,經過你定義的流 程才有可能存取私有資料 –
事實上,使用者也無從得知你的類別中有哪些私 有資料,使用者不會知道物件的內部細節。 21
22.
何謂封裝? • 封裝目的主要就是隱藏物件細節,將物件當 作黑箱進行操作。 – 使用者會呼叫建構式,但不知道建構式的細節 –
使用者會呼叫方法,但不知道方法的流程 – 使用者也不會知道有哪些私有資料 – 要操作物件,一律得透過你提供的方法呼叫 22
23.
public權限修飾 • 假設現在為了管理需求,要將CashCard類 別定義至cc.openhome.virtual套件中 • 除了原始碼與位元碼的資料夾需求必須符合 套件階層之外,原始碼內容也得作些修改: 23
24.
public權限修飾 • 你發現使用到CashCard的CardApp出錯了 24
25.
public權限修飾 • 如果沒有宣告權限修飾的成員,只有在相同 套件的類別程式碼中,才可以直接存取,也 就是「套件範圍權限」 • 如果不同套件的類別程式碼中,想要直接存 取,就會出現圖5.4的錯誤訊息 •
如果想在其它套件的類別程式碼中存取某套 件的類別或物件成員,則該類別或物件成員 必須是公開成員,要使用public加以宣告 25
26.
public權限修飾 26
27.
關於建構式 • 在定義類別時,可以使用建構式定義物件建 立的初始流程 • 建構式是與類別名稱同名,無需宣告傳回型 態的方法 27
28.
關於建構式 • 如果你如下建立Some物件,成員a與text會 初始兩次: 28
29.
關於建構式 • 編譯器會在你沒有撰寫任何建構式時,自動 加入預設建構式(Default constructor) •
沒有撰寫任何建構式時,也可以如下以無引 數方式呼叫建構式: 29
30.
關於建構式 • 如果自行撰寫了建構式,編譯器就不會自動 建立預設建構式 • 就只有一個具int參數的建構式,所以就不 可以new
Some()來建構物件,而必須使用 new Some(1)的形式來建構物件 30
31.
建構式與方法重載 • 建構物件時也許希望有對應的初始流程,可 以定義多個建構式,只要參數型態或個數不 同,這稱之為重載(Overload)建構式 31
32.
• 建構時有兩種選擇,一是使用new Some(100)的方式,另一個是使用new Some(100, "some
text")的方式 32
33.
建構式與方法重載 • 定義方法時也可以進行重載,可為類似功能 的方法提供統一名稱,但根據參數型態或個 數的不同呼叫對應的方法 33
34.
建構式與方法重載 • 方法重載讓程式設計人員不用苦惱方法名稱 的設計,用一致名稱來呼叫類似功能的方法 • 方法重載可根據傳遞引數的型態不同,也可 根據參數列個數的不同來設計方法重載 34
35.
建構式與方法重載 • 返回值型態不可作為方法重載依據,以下方 法重載並不正確: 35
36.
建構式與方法重載 • 在JDK5之後使用方法重載時,要注意自動裝 箱、拆箱問題 36
37.
建構式與方法重載 • 編譯器在處理重載方法時,會依以下順序來 處理: – 還沒有裝箱動作前可符合引數個數與型態的方法。 –
裝箱動作後可符合引數個數與型態的方法。 – 嘗試有不定長度引數(稍後說明)並可符合引數 型態的方法。 – 找不到合適的方法,編譯錯誤。 37
38.
使用this • 除了被宣告為static的地方外,this關鍵 字可以出現在類別中任何地方 38
39.
使用this • 在建構式參數與物件資料成員同名時,可用 this加以區別 39
40.
使用this • 在5.2.3看到過這個程式片段: 40
41.
使用this • 可以在建構式中呼叫另一個已定義的建構式 41
42.
• 在建構物件之後、呼叫建構式之前,若有想 執行的流程,可以使用{}定義 42
43.
使用this • 如果區域變數宣告了final,表示設值後就 不能再變動 • 物件資料成員上也可以宣告final •
程式中其它地方不能再有對x設值的動作,否 則會編譯錯誤 43
44.
使用this • 那以下的程式片段呢? • 如果物件資料成員被宣告為final,但沒有 明確使用=指定值,那表示延遲物件成員值的 指定 44
45.
使用this • 在建構式執行流程中,一定要有對該資料成 員指定值的動作,否則編譯錯誤 45
46.
使用this • 如果改為以下就可以通過編譯: 46
47.
static類別成員 • 建立了多個Ball物件,那每個Ball物件都 會有自己的radius與PI成員 47
48.
static類別成員 • 圓周率其實是個固定的常數,不用每個物件 各自擁有,你可以在PI上宣告static,表 示它屬於類別: 48
49.
static類別成員 • 被宣告為static的成員,是將類別名稱作為 名稱空間 • 也可以將宣告方法為static成員 49
50.
static類別成員 • 被宣告為static的方法,也是將類別名稱作 為名稱空間 • 雖然語法上,也是可以透過參考名稱存取 static成員,但非常不建議如此撰寫: 50
51.
static類別成員 • Java程式設計領域,早就有許多良好命名慣 例,沒有遵守慣例並不是錯,但會造成溝通 與維護的麻煩 • 以類別命名實例來說,首字是大寫,以 static使用慣例來說,是透過類別名稱與. 運算子來存取 51
52.
static類別成員 • 在大家都遵守命名慣例的情況下,看到首字 大寫就知道它是類別,透過類別名稱與.運算 子來存取,就會知道它是static成員 • 一直在用的System.out、System.in呢? 52
53.
static類別成員 • 先前遇過的還有Integer.parseInt()、 Long.parseLong()等剖析方法 • static成員屬於類別所擁有,將類別名稱當 作是名稱空間是其最常使用之方式 •
在Java SE API中,只要想到與數學相關的功 能,就會想到java.lang.Math,因為有許 多以Math類別為名稱空間的常數與公用方法 53
54.
static類別成員 54
55.
static類別成員 • 因為都是static成員,所以你就可以這麼使 用: 55
56.
static類別成員 • 由於static成員是屬於類別,而非個別物件, 所以在static成員中使用this,會是一種 語意上的錯誤 • 在static方法或區塊(稍後說明)中不能出 現this關鍵字 56
57.
static類別成員 • 如果你在程式碼中撰寫了某個物件資料成員, 雖然沒有撰寫this,但也隱含了這個物件某 成員的意思 57
58.
static類別成員 • static方法或區塊中,也不能呼叫非 static方法或區塊 58
59.
static類別成員 • static方法或區塊中,可以使用static資 料成員或方法成員 59
60.
static類別成員 • 如果你有些動作,想在位元碼載入後執行, 則可以定義static區塊 60
61.
static類別成員 • 在JDK5之後,新增了import static語法 61
62.
static類別成員 • 如果一個類別中有多個static成員想偷懶, 也可以使用* • 名稱衝突編譯器可透過以下順序來解析: –
區域變數覆蓋 – 成員覆蓋 – 重載方法比對 62
63.
static類別成員 • 如果編譯器無法判斷,則會回報錯誤 63
64.
不定長度引數 • 若方法的引數個數事先無法決定該如何處理? 64
65.
不定長度引數 • 在JDK5之後支援不定長度引數(Variable- length Argument) 65
66.
不定長度引數 • 實際上不定長度引數是編譯器蜜糖 66
67.
不定長度引數 • System.out.println(MathTool.sum( 1, 2,
3)),展開後也是變為陣列: 67
68.
不定長度引數 • 使用不定長度引數時,方法上宣告的不定長 度參數必須是參數列最後一個 • 使用兩個以上不定長度引數也是不合法的 68
69.
內部類別 • 可以在類別中再定義類別,稱之為內部類別 (Inner class) 69
70.
內部類別 • 一個被宣告為static的內部類別,通常是將 外部類別當作名稱空間 • 可以存取外部類別static成員,但不可存取 外部類別非static成員 70
71.
內部類別 • 方法中也可以宣告類別 71
72.
內部類別 • 實務上比較少看到在方法中定義具名的內部 類別,倒很常看到方法中定義匿名內部類別 (Anonymous inner
class)並直接實例化 72
73.
傳值呼叫 73
74.
傳值呼叫 • 如果由方法中傳回物件,並指定給變數,也 是這種行為 74
Download now