目录
一、封装
1.1.为什么要使用封装?
我们创建一个表示Person的JavaBean模板类|实体类
class Person{
//字段
public String name;
public int age;
//空构造
public Person() {
}
}
我们单纯的看这个Person类,可能没有什么问题?
但是实际上,我们创建一个Person类的实例,之后,我们给这个对象的age属性赋值-15或是200,编译运行的时候也是不报错的。
也就是说,这样的在代码中是合适的,但是代码是要反应现实的,放在现实世界中是不合理的。这是代码逻辑和显示逻辑的不吻合。
不仅如此,我们在修改对象的属性值的时候,也只需要通过对象名.属性名就可以进行修改了,这看起来没什么,很容易就修改了。但是如果这个属性是你银行卡里的余额呢?是不是突然觉得自己的小钱包已经不安全了。
我们接下来就尝试解决一下这个问题吧。
1.2.封装的初次尝试
1.2.1.思路
我们首先解决属性修改过于容易的问题。
仔细回想一下,我们经常修改属性的值是不是在main方法中,也就是说,在方法中,我们可以对属性的值进行修改。
如果,我们把对属性的值的修改放到方法中,让使用这个Person类的用户都通过方法进行修改,而不是通过对象名.的方式进行修改。
这个方法一定是pubilc修饰的,只有pubilc修饰的方法才可以让用户使用。
public void setAge(int age){
this.age = age;
}
此时,我们发现,采用方法来修改属性的同时,我们还可以再方法中对用户输入的值进行判断,当用户输入的值不满足条件的时候,赋值失败。
这样,就同时也解决了Person类中的age可以为负数的问题。
但是,我们虽然设置了方法来修改属性值,但是实际上,还是可以通过对象名.的方式来修改,这是因为我们的属性值是使用pubilc修饰的,对外界来说,是可见的。
我们可以通过private修饰符来解决这个问题。
1.2.2.private修饰符
私有的,只能在类中访问
成员修饰符,只能修饰成员,不能修饰局部
对于私有的属性而言,需要配合一对公共的访问方式来使用
设置器 setter:成员方法,为私有成员设置属性值
访问器 getter:成员方法,获取私有属性的值
1.2.3.private的使用
第一步,我们需要把Person类成员变量中使用pubilc修饰的实例变量都修改为private修饰符。这回让外界不能再通过对象名.的方式修改属性值。
class Person{
private String name;
private int age;
}
第二步,我们需要添加对外的方法,放外界通过我们指定的方法来修改值以及获取我们对象中的值。
class Person{
private String name;
private int age;
//构造器
public Person(){}
//设置器
public void setAge(int age){
if(age<=0 || age>150){
return;
}
this.age = age;
}
//访问器
public int getAge(){
return this.age;
}
}
1.3.封装的概念
隐藏内部的实现细节,对外提供公用的访问方式
1.4.封装的优点
1.提高安全性
2.提高代码复用性
1.5.JavaBean规范
JavaBean表示一系列的实体类|模板类
规范:
1.类是公共的
2.至少提供一个空构造
3.属性私有化
4.提供一对公共访问方式
5.重写toString、equals方法