
物件導向程式設計 (object-oriented programming) 有三大基本特性,分別是封裝 (encapsulation) 、繼承 (inheritance) 及多型 (polymorphism)

繼承的目的是讓類別 (class) 具有像是親屬的垂直關係(父母子女),子類別 (subclass) 可以擁有父類別 (superclass) 的屬性 (field) 及方法 (method) ,而多型像是親屬的平行關係(兄弟姊妹),多個子類別繼承自單一父類別之時,這些子類別就可以用父類別代替,父類別如同家族裡的「姓」,子類別則是「名」。
至於封裝的意思就是把屬性封在類別中,這還牽涉到程式設計中另一個重要的概念 資訊隱藏 (information hiding) ,主要就是不讓外界隨意存取類別的屬性,也就是說,只讓類別的屬性給同個類別的方法存取。
這就需要用到 private 修飾詞 (modifier) 了,當屬性宣告為 private 的時候,該屬性就只能由同一個類別存取,我們將 ClassDemo01 類別的屬性 a 封裝,改寫成 ClassDemo03 類別,程式如下
| 001 | public class ClassDemo03 { |
| 002 | private int a; |
| 003 | |
| 004 | // setter 方法 |
| 005 | public void setA(int p1) { |
| 006 | a = p1; |
| 007 | } |
| 008 | |
| 009 | // getter 方法 |
| 010 | public int getA() { |
| 011 | return a; |
| 012 | } |
| 013 | |
| 014 | public int doSomething(int p1) { |
| 015 | return a + p1; |
| 016 | } |
| 017 | |
| 018 | public static void main(String[] args) { |
| 019 | ClassDemo03 d = new ClassDemo03(); |
| 020 | // 利用 setter 設定屬性 |
| 021 | d.setA(11); |
| 022 | |
| 023 | System.out.println(); |
| 024 | // 利用 getter 印出屬性 a |
| 025 | System.out.println(d.getA()); |
| 026 | System.out.println(d.doSomething(1)); |
| 027 | System.out.println(); |
| 028 | } |
| 029 | } |
| 030 | |
| 031 | /* 檔名: ClassDemo03.java |
| 032 | 作者: Kaiching Chang |
| 033 | 時間: September, 2014 */ |
首先,屬性宣告為 private ,這樣屬性就只限類別 中可存取
| 002 | private int a; |
權限修飾詞有三個,分別是 public 、 private 及 protected ,加上不宣告權限修飾詞的形式,共有四種不同的權限。
接著如果要讓外界可以存取已封裝的屬性,就要另外設置 public 的 getter 與 setter 方法
| 004 | // setter 方法 |
| 005 | public void setA(int p1) { |
| 006 | a = p1; |
| 007 | } |
| 008 | |
| 009 | // getter 方法 |
| 010 | public int getA() { |
| 011 | return a; |
| 012 | } |
編譯後執行,結果如下

留意設定屬性 a 已經改成在建立物件後呼叫 setter 方法
| 020 | // 利用 setter 設定屬性 |
| 021 | d.setA(11); |
這是 setter 方法的用途沒錯,不過如果我們想要建立物件的同時設定好屬性,就需要自訂建構子 (constructor) 了。
中英文術語對照
| 物件導向程式設計 | object-oriented programming |
| 封裝 | encapsulation |
| 繼承 | inheritance |
| 多型 | polymorphism |
| 類別 | class |
| 父類別 | superclass |
| 屬性 | field |
| 方法 | method |
| 資訊隱藏 | information hiding |
| 修飾詞 | modifier |
| 建構子 | constructor |
重點整理
- 物件導向程式設計的三大基本特性是封裝、繼承及多型,繼承像是親屬父母子女的垂直關係,多型像是兄弟姊妹的平行關係。
- 封裝就是把屬性封在類別中,這是資訊隱藏的概念,需要把屬性宣告為 private 。
- 權限修飾詞有 public 、 private 及 protected ,加上不宣告權限修飾詞的形式,共有四種不同的權限。
- 存取已封裝的屬性需要用 public 的 getter 與 setter 方法。
問題與討論
- 物件導向程式設計有哪三大基本特性?
- 什麼是封裝?為什麼要做封裝?
- 什麼是繼承?繼承機制有什麼優點?
- 什麼是多型?可以用什麼方式比擬嗎?
- 什麼是 getter 與 setter ?為什麼要有 getter 與 setter ?
the end
沒有留言:
張貼留言
0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群或 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力