封裝

優(yōu)秀文章

菜鳥教程 > Java 封裝


說明
  • 封裝是對(duì)抽象的編碼實(shí)現(xiàn);<個(gè)人理解>
  • 封裝的實(shí)質(zhì)是用訪問修飾符來控制成員屬性和方法;
  • 封裝的目的是約束和規(guī)范屬性或方法的訪問操作;

訪問修飾符
  • private(私有):只有當(dāng)前類內(nèi)部可以訪問;
  • default/friendly(默認(rèn)/缺?。涸趐rivate的基礎(chǔ)上還可以被同包下的類訪問;
  • protected(保護(hù)):在default/friendly的基礎(chǔ)上還可以被子類訪問;
  • public(公有):在protected的基礎(chǔ)上還可以被其他包的類訪問;

實(shí)例

ArrayList源碼(已刪減):

public class ArrayList<E>{
    
    // 集合數(shù)據(jù)
    transient Object[] elementData;
    
    // 集合數(shù)據(jù)的大小
    private int size;
    
    // 獲取指定元素
    public E get(int index) {
        return elementData(index);
    }
    
    public E set(int index, E element) {
        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

    public boolean add(E e) {
        elementData[size++] = e;
        return true;
    }
    
    public int size() {
        return size;
    }
    
    public boolean isEmpty() {
        return size == 0;
    }
    
    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }
    
    public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }
    
    // 根據(jù)索引獲取對(duì)應(yīng)的元素
    E elementData(int index) {
        return (E) elementData[index];
    }
    
}

ArrayList私有化了成員屬性并對(duì)外提供它們?cè)L問方法:

get:獲取指定位置的元素;
set:向指定位置存放元素;
add:添加新的元素;
size:獲取集合的大??;
isEmpty:判斷集合是否為空;
contains:判斷集合中是否存在指定元素;
indexOf:判斷集合中指定元素的所在位置;
...

通過以上方法可以將原本復(fù)雜的數(shù)組操作變得簡(jiǎn)單,這就是封裝。


優(yōu)點(diǎn)

  • 易于控制:修改訪問方法的實(shí)現(xiàn)可以限制外部對(duì)屬性的非法操作;
  • 易于維護(hù):在操作目的不變的情況下修改或升級(jí)訪問方法不會(huì)影其他類的正常訪問;
  • 易于操作:調(diào)用者只需調(diào)用所需方法而不必考慮方法內(nèi)部的具體實(shí)現(xiàn);

最后

封裝是面向?qū)ο缶幊痰膶?shí)現(xiàn)基礎(chǔ)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,954評(píng)論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,644評(píng)論 18 399
  • 【JS-8】 angular js自定義指令 directive 如何使用?為什么要使用封裝的自定義指令? 小課堂...
    愛上Shu的小刺猬閱讀 2,009評(píng)論 0 3
  • 從畢業(yè)到今天有一個(gè)月多一些了 當(dāng)然 厲害的人也被一些提前批院校錄取了 然而我卻只能看著心塞吧 可能對(duì)于一個(gè)藝術(shù)生...
    ne呢閱讀 281評(píng)論 0 0
  • 生活對(duì)于一個(gè)人來說是什么?時(shí)間組成,社會(huì)關(guān)系構(gòu)成,事件構(gòu)成,當(dāng)然還有個(gè)人的情感和情緒填充。生活被某些關(guān)鍵的節(jié)...
    鮫小爻閱讀 254評(píng)論 0 1

友情鏈接更多精彩內(nèi)容