java学习面向对象之封装
在以往几节当中我们讲到了什么是类,类就是对一类事物的描述,比如现在我们有一个人类
class Person { /** *这里我们分别在name和age上加上了元素的访问权限 *这里的private是指,这个变量只能被当前类访问,其他的地方是没法访问到的,即使是当前类的一个实例化对象 *也是没法访问的。那么这里就有一个问题了,我们定义了一个成员变量确没法访问: *这里举一个详细的例子来讲: *我们有一个房子,房子里面放了很多的钱,我们的房子有一个门。在我们没有给这个门加任何的限制的时候,任何人 *都是可以进出的,也就是说他默认的就是public修饰符,这样是不是很危险呢?此时为了安全期间,我们就用墙把这 *个门给堵上了,这样就又出现了一个问题,我们没法取钱啊,我们再换一种方式,我们给这个门加上一把锁,这样 *我们就可以即能限定出入这个对象的人,同时也让我们能够取钱。 *承接上面的描述,现在我们有一把锁,想要进去,是不是得有一把钥匙才可以啊,只要有这把钥匙我们就能够进去 *这个就需要一个公开的成员方法来判断进来的人是好人还是坏人,因为我们之前讲的语句,如if swith等等只能在函数 *当中存在,其他地方他的存在是不合法的 *综上所述,便就是封装 */ private String name; private int age; /** *既然定义了私有成员变量,那么接下来我们来定义一个公开的访问方法才可以,同时这个公开的方法当中有能够起限定作 *用的代码段 */ public void setAge(int n) { /**限制n的范围,防止破坏我们已经封装好了的合理的对象*/ if(n>0&&n<100) age = n; else System.out.print("非法的年龄数值,请检查您的输入是否有误"); } public int getAge() { return age; } void speak() { System.out.print(name+"....."+age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); //p.age = 10; //p.age = -10;显然这种定义方式是不正确的,因为他违背了我们正确描述事物的原则 /** *这里我们为了保护我们的数据是在合法范围之内的,就需要界定他的访问权限,让他的值 *在我们的控制范围之内,这个便就是封装 */ /** *在启用封装之后,我们就来调用相关的方法 */ p.setAge(10);//合法赋值 p.setAge(-333);//非法赋值 p.speak(); } }
讲了那么多:那么封装的好处在什么地方呢?
封装的定义:封装是指,隐藏对象的属性还有实现细节,仅对外提供公共的访问方式。
但是需要注意的一点是,私有化仅是体现封装的一种方式而已。
封装的好处:
1、将变化隔离;2、便于使用;3、提高重用性;4、提高安全性。
封装的原则:
1、将不需要对外提供的内容都隐藏起来
2、将属性都隐藏起来,提供公共方法对其访问。