抽象,实际上是一个分析的过程,是根据需求的表述归纳实体的类型、属性和行为,其产出物是类图。类图勾勒了实体应该具备哪些属性和行为,但未涉及细节。
而封装,实则就是将抽象得到的模型转变为具体实现。它的要点是,尽可能对外隐藏细节,Java 中的手段就是使用 private,是否简单粗暴地为所有属性提供 getter 和 setter 呢?不建议这样做,因为这样做和将属性定义为 public 没有区别。
封装的关键是,根据业务进行分析。
有的属性不能修改则不提供 setter,有的属性的修改有限制规则,则需要在 setter 中进行限定,有的属性不希望外界获取则不提供 getter(或声明为私有的),有些方法或者函数仅仅是内部使用的,也可以声明为 private,这些都是具体问题具体分析的。
抽象,是归纳提炼;封装则是在实现中依据业务需求尽量隐藏细节。
抽象类:
一个类包含了抽象方法,那它一定是抽象类;一个类是抽象类,它可以包含抽象方法,也可以不包含,也可以包含具体的方法。
抽象类不能实例化,但是可以包含构造方法。