众所周知,Java作为世界上最流行的语言之一,面向对象是其重要的特点。而面向对象这个概念对于初学者来说,或许需要一点儿抽象思维。这抽象思维实在是有点玄乎,笔者学习编程也算有两个寒暑了,这抽象思维硬是没有升上来!
在阅读以下篇幅之前,我们默认读者已经理解面向对象的概念。
面向对象有三大特性:继承、封装、多态。本篇重点讨论的便是面向对象的”封装”特性。以下是笔者的所理解的封装定义 :
封装是利用抽象数据类型将数据和基于对数据的操作打包在一起,使其构成一个不可分割的独立实体。在独立实体中,数据被保护在抽象数据类型的内部的同时,还要尽可能隐藏内部实现细节,仅保留一些接口来使之与外界产生联系。
说完定义,我们先谈谈封装都有哪些优点 :
- 高内聚,低耦合
- 通过接口,类的内部数据可以被外部修改
- 以下省略一万字….
以上简短的叙述,仅是笔者的心得。为了让读者更好的理解封装,我们可以看看一下小例子。
public class Test { //抽象数据类型Test
String name; //数据name
int age; //数据age
Date birthday; //数据birthday
//基于数据的操作
void sayHello(){
// do something....
}
}
通过例子,我们可以发现上述代码虽然实现的封装,但这种封装在实际情况中并不怎么实用。而且,如果我们想访问Test数据的时候,直接通过实例对象来访问,那么还要封装何用?
为了更好的体现封装的含义,我们来看看以下代码:
public class Test { //抽象数据类型Test
private String name; //私有数据 name
private int age; //私有数据 age
private Date birthday; //私有数据 birthday
//基于数据的操作
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Date getBirthday() {
return birthday;
}
// setName、setAge、setBirthday省略...
}
我们通过private关键字,把数据私有化。这样做,类外便不可访问直接访问内部数据,若要访问,便只能通过接口访问。所以,面向对象的封装性,可以使程序模块具有良好的独立性和可维护性。
PS : 自从使用了封装,妈妈再也不担心,儿媳妇耐不住寂寞啦!