今天在班上讲了封装,又是元气满满的一个周末。
二话不说,还是要化繁为简,这节的目的是整明白啥叫封装!
首先看一眼百度百科上封装的定义:
讲道理,看到这样的描述,我的人是崩溃的
首先用一个案例引入,那就是女性年龄这事,一般非妙龄少女的年龄,是不想让人知道的,比如我!
首先创建一个Girl类:
public class Girl {
int age;
}
然后写一个测试类:
public class Test {
public static void main(String[] args) {
Girl g=new Girl();
g.age=36;
}
}
上来你就给我来个36岁,这是跟sei俩呢!我拒绝!!
那么问题来了,咋拒绝?不想让你随意糟蹋我的年龄。。解决:在age属性前加上一个修饰符private:
public class Girl {
private int age;
}
那么测试类中,立马就报错了:
目的达到了,我这个age对你来说访问不到了!那么,此时,你该理解了,我这个age属性,对你来说,已经封装起来了,但是效果不好,为啥呢?因为对你哪些不礼貌的人,我确实需要隐藏我的年龄,但是在一些必要的场合,age这个属性也必须要提供给你用,怎么办呢?解决办法:你对我的年龄,无非就是设置值,读取值操作,那么我就给你提供俩方法,让你通过这两个方法访问到我的年龄。。
public class Girl {
private int age;
//设置年龄的值
public void sheZhiAge(int age) {
this.age = age;
}
//读取年龄的值
public int duQuAge() {
return age;
}
}
这样你访问的时候,就可以按照下面方式访问了:
public class Test {
public static void main(String[] args) {
Girl g=new Girl();
//对年龄设置值:
g.sheZhiAge(20);//美美哒20岁
//读取年龄的值:
System.out.println(g.duQuAge());
}
}
这种方式,达到了设置,读取的目的,那么问题来了,你现在再说我是36岁可以吗?可以试一下,36岁,依旧可以设置读取。
public class Test {
public static void main(String[] args) {
Girl g=new Girl();
//对年龄设置值:
g.sheZhiAge(36);//我老了
//读取年龄的值:
System.out.println(g.duQuAge());
}
}
恩?可以设置读取???那折腾这么多干嘛?
答:之所以这样做,是因为,这个设置读取的方法是我给你提供的,那么既然是我提供的,我怎么写就是我的事了!那么我就可以加限制了!我将其中的设置年龄的方法改为:
//设置年龄的值
public void sheZhiAge(int age) {
if(age>=30){
this.age=18;
}else{
this.age = age;
}
}
加了上面的限制,你再问是不是36岁的时候 ,那么返回的值就是18了!
那么上面,我们完成了对age属性的封装,终于明白 ,啥叫封装了。
总结一句话,你访问的有限制,不随意,对你来说,都是封装!
那么在实际写代码过程中,我们对于上述的两个设置值,读取值的方法,我们一般都定义为set,get方法:
public class Girl {
private int age;
//设置年龄的值
public void setAge(int age) {
if(age>=30){
this.age=18;
}else{
this.age = age;
}
}
//读取年龄的值
public int getAge() {
return age;
}
}
另外说一嘴,有些人常说,private就是封装。这句话是错误的。上面我们虽然用到了private,但是private只是我们加的一个修饰符,只是用来控制权限的其中一种方式而已,稍后有机会我再更新java中的权限修饰符!bye~