转自 : https://www.sxt.cn/first-season/044.html
https://www.runoob.com/java/java-modifier-types.html
封装(encapsulation)
为什么需要封装?封装的作用和含义?
我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?
我要开车,….
制造厂家为了方便我们使用电视,方便我们开车,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关、比如:油门。具体怎么内部实现的,我们不需要操心。
需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来。这就是封装。
白话:该露的露,该藏的藏
专业:我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
编程中封装的具体意义
便于调用者调用。
良好的封装,便于修改内部代码,提高可维护性。
良好的封装,可进行数据完整性检测,保证数据的有效性。
使用访问控制符,实现封装
同一个类 | 同一个包 | 子类 | 所有类 | |
---|---|---|---|---|
private | * | |||
default(即不加修饰符的时候) | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
public : 对所有类可见。使用对象:类、接口、变量、方法
封装的使用细节
1.属性一般使用private.(除非本属性确定会让子类继承并且使用)
提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
2.一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。
访问控制和继承
请注意以下方法继承的规则:
父类中声明为 public 的方法在子类中也必须为 public。
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
父类中声明为 private 的方法,不能够被继承。