写博客是一个打通任督二脉的好方法,正如懂java和让别人懂java是不同概念一样。这是学习java2周后的第一篇杂文,多是别人的观点的复制。希望通过这个方式能够让自己逐步提升,转行路漫漫,就先不扯淡。
封装
从字面语义可以理解成打包的意思。从面向过程编程的函数(功能块打包),到面向对象的类(方法和数据集),都可以理解成封装。而在java中,通过访问权限控制从而达到隐藏数据和方法细节的做法,重新赋予了封装新的含义。三种方式的封装,都实现了细节的隐藏,重新提供一种更为方便或安全的访问接口来实现调用。
封装方式:
- 类--数据集和方法集的封装
- 方法--语句功能块的封装
- 变量--数据细节的封装
类封装
在java类中,类分为:无公共数据的方法集类、有公共数据的方法集类、以数据为主体的数据集类。
类封装为我们提供了一个更好的管理模式和更高等级的模块化,将编程更多的指向了程序设计。
无公共数据的方法集类如Math类,方法之间是独立的,它们所共享的数据都是不依赖于实例个体的,如PI和e。这种类的存在是基于某种逻辑分类将方法整合到一起,通过类名为外面提供统一的访问方式即类名.方法名。
有公共数据的方法集,java中大多数类都是。它是将具有相同属性和方法的个体抽象成一个模板,调用时通过实例化产生对象来进行方法和属性的调用。所谓的有公共数据是指,类中的方法所使用的数据是指向一个个体的。
方法封装
方法作为一个功能语句块儿,能够很好的实现程序编写模块化和代码的复用。
方法中的参数能够让调用者能够实现与特定功能的交互,而且方法的重载为调用者实现了多种方式的交互。
变量封装
什么是变量封装?
很多情况下,某个类中的变量数据并不希望能够被调用者使用或更改(比如一个女性类中的年龄),这时通过隐藏数据细节,改为为调用者提供有权限的访问接口来实现封装的目的。
实现封装的步骤:
- 为变量设置访问修饰符private(只允许本类调用变量)
- 添加getter和setter方法为外界提供访问接口
- 在getter和setter方法中设置访问条件。
getter和setter方法的优势?
刚开始的时候会想,getter和setter方法与通过引用来直接访问变量并没有什么区别,都可以实现变量的读写访问。那为什么还要采用这种方法呢?
- 如果类设计者不想外界访问某个变量,或者只想提供某个变量的读操作或者写操作时,通过不提供或只提供getter和setter方法中的一个便可实现变量的部分访问,而通过引用来直接访问是没有这种能力的。
- 类设计者并不想外界无条件的读写某个变量,这时我们可以通过在getter或setter方法中设置访问权限(例如判断传入参数的合法性)。同样,通过引用直接访问也达不到这个需求。
- 为调用者提供方法接口,而不是变量名,达到了调用的统一性。