優(yōu)秀文章
說明
- 封裝是對(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ǔ)。