封装
2017-12-07 本文已影响3人
月寒兮夜凉
优秀文章
说明
- 封装是对抽象的编码实现;<个人理解>
- 封装的实质是用访问修饰符来控制成员属性和方法;
- 封装的目的是约束和规范属性或方法的访问操作;
访问修饰符
- private(私有):只有当前类内部可以访问;
- default/friendly(默认/缺省):在private的基础上还可以被同包下的类访问;
- protected(保护):在default/friendly的基础上还可以被子类访问;
- public(公有):在protected的基础上还可以被其他包的类访问;
实例
ArrayList源码(已删减):
public class ArrayList<E>{
// 集合数据
transient Object[] elementData;
// 集合数据的大小
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;
}
// 根据索引获取对应的元素
E elementData(int index) {
return (E) elementData[index];
}
}
ArrayList私有化了成员属性并对外提供它们访问方法:
get:获取指定位置的元素;
set:向指定位置存放元素;
add:添加新的元素;
size:获取集合的大小;
isEmpty:判断集合是否为空;
contains:判断集合中是否存在指定元素;
indexOf:判断集合中指定元素的所在位置;
...
通过以上方法可以将原本复杂的数组操作变得简单,这就是封装。
优点
- 易于控制:修改访问方法的实现可以限制外部对属性的非法操作;
- 易于维护:在操作目的不变的情况下修改或升级访问方法不会影其他类的正常访问;
- 易于操作:调用者只需调用所需方法而不必考虑方法内部的具体实现;
最后
封装是面向对象编程的实现基础。