封装的引入
我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关。具体内部是怎么实现的,我们不需要操心。
需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来,这就是封装。从java的角度上来分析,封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
封装的优点
1、 提高代码的安全性。
2、 提高代码的复用性。
3、 使用时,只需要了解访问方式,不需要知道内部实现细节。
封装原则:
1、将不需要对外提供的内容都隐藏起来。
2、把属性都隐藏,提供公共方法对其访问。
1.1 访问控制符
Java中使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。
下面详细讲述它们的访问权限问题,如下表所示:
访问权限修饰符 | ||||
---|---|---|---|---|
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
private:表示私有的,作用范围是当前类(类可见性)。
default:表示默认的,作用范围是当前类+当前包(包可见型)。
----->注意:权限修饰符中,没有default关键字,“默认的”权限只需省略权限修饰符即可。
protected:表示受保护的,作用范围是当前类+当前包+其它包中的子类(子类可见性)。
public:表示公开的,作用范围是是当前类+当前包+其它包(项目可见性)。
权限修饰符如何使用???
a)private、default、protected和public都可以修饰成员变量、静态变量、成员方法和静态方法。
成员变量:一般使用private来修饰。
静态变量:一般使用public来修饰。
成员方法:如果需要外界访问,则使用public修饰;如果只为当前类服务,则使用private修饰。
静态方法:一般使用public来修饰。
b)private、default、protected和public还可以修饰构造方法。
如果这个类需要实例化,,那么该类的构造方法建议使用public修饰。
如果这个类不需要实例化,那么该类的构造方法必须使用private修饰。
--> 工具类一般不需要被实例化,那么我们工具类中的构造方法我们使用private修饰,例如:Arrays。
c)我们可以使用default和public来修饰类,注意private和protected不能修饰类。
一个源文件中,最多只能有一个类使用public来修饰。
使用public修饰的类,源文件名字必须和类名保持一致。
我们在操作属性时,通常会对数据进行封装,这样就可以增加了数据访问限制,增加了程序可维护性。那么如何给使用private修饰的成员变量进行赋值呢?
这里就需要使用get/set方法来访问相关属性了
1、使用set方法实现对属性的赋值操作;
语法:
public void setAge(int age) {
this.age = age;
}
注意事项:
-
a)setter方法肯定是成员方法,并且一定使用public修饰。
-
b)通过setter实现赋值之前,我们可以先判断赋值的内容是否合法。
2、使用get方法实现对属性的取值操作。
语法:
public int getAge() {
return this.age;
}
注意事项:
-
a)getter方法肯定是成员方法,并且一定使用public修饰。
-
b)通过getter方法获取成员变量值时,我们还可以对获取的数据做统一的操作。
-
c)如果成员变量为boolean类型,那么getter方法就应该特殊定义处理。
例如:Student类型中有一个boolean类型的成员变量marry,则getter方法为:
public boolean isMarry() { return marry; }
补充:自动生成get/set方法快捷键:alt + insert