一.封装的作用
1.保护内部结构的安全
2.屏蔽复杂,暴露简单
二.不封装的缺点
先来看一段程序
public class Person {
int age;
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.age = -100;
System.out.println(p1.age);
}
}
运行结果
从结果中看出,虽然程序顺利通过编译,并且执行过程也没有任何错误,但是年龄应该是个自然数,不能是负数,我们的程序能在外部随意的访问,会造成数据的不安全,所以我们的程序并不好。
三.使用关键字private进行封装
我们将代码块Person类的数据属性设置为private
public class Person {
private int age;
}
运行结果:
我们发现对数据进行了封装,但是封装过头了,数据无法访问,更无法修改了,这不是我们想要的,因为我们要对数据进行操作啊,就好比你造一间房屋,却没有了门,那么这个房屋就失去了它的意义,我们应该给它装个门,由此我们想到了也可以给程序设计个类似的门一样的东西。
四.set方法和get方法的封装
考虑到用了private关键字修饰数据后,只能在本类中访问,我们由此想到可以在本类中利用方法访问和修改数据,由此产生了get方法和set方法。
get:
public 返回值类型 get+属性名字字母大写(无参){
return xxx;
}
set:
public void set+属性名字字母大写(有一个无参){
xxx = 参数;
}
(注意:get和set方法的名称要严格按照 set+属性名字字母大写 或者 get+属性名字字母大写 ,不然以后我们的程序是一个不通用的程序)
最终的程序:
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int year) {
age = year;
}
}
public class PersonTest {
public static void main(String[] args) {
/**创建一个对象*/
Person p1 = new Person();
/**使用get方法获得age的初始值*/
System.out.println(p1.getAge());
/**使用set方法给age赋初值*/
p1.setAge(100);
/**使用get方法获取age并且输出age的值*/
System.out.println(p1.getAge());
}
}
最后,我说一下我本人对于封装的一些见解,封装在我们生活中很常见,比如我们的手机,电脑,电视等等,这些封装使我们可以很方便的去使用它们,而不用去真的了解他们的运行,比如我们操控遥控器就可以对电视进行频道的切换,无论你如何按遥控器,甚至把它放到水里,电视机依然完好无损,这就是黑匣子操作的好处,这就是封装带来的好处。
封装使面向对象程序设计的三大操作之一,也是后面的继承和多态的基础,所以把握好封装具有重要的意义。