学习java快要一年了,在实际的工作中,发现自己的java基础还是很薄弱,自此,发愤图强,好好的加强一下,第一课面向对象的三大特性--封装搞起。
封装,顾名思义就是将一些东西包装起来,不让外人看到里面的细节,专业点的话就是信息隐藏,是指利用的抽象的数据类型将数据以及基于数据的操作封装在一起,使它们成为不可分割的实体,数据被保护在数据类型的内部,尽可能的异常内部的细节,只提供外部的接口,使之与外部进行联系。系统的其他对象只能通过包裹的数据已经授权的操作与封装的对象进行交互,也就是无需知道对象内部的细节,通过提供的外部的接口与之交互。
所谓封装,它自己封装自己的属性和方法,无需借助其他的对象来完成自己的操作。
封装的四大好处:
1、良好的封装可以减少代码的耦合度;
2、可以对变量更加精确的控制;
3、类内部结构可以自由的修改;
4、隐藏信息,实现细节。
下面举两个java类(Man.java\Woman.java),来阐述一下封装:
Man.java:
package com.boozhong.robot.modules.appointment; /** * Created by Administrator on 2017/5/4. */ public class Man { private String name; private String sex; private double salary; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public void setSalary(double salary) { this.salary = salary; } }
Woman.java:
package com.boozhong.robot.modules.appointment; /** * Created by Administrator on 2017/5/4. */ public class Woman { private String name; private int age; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
Man.java中对于salary的get方法没有提供,Woman.java中对于age的get方法没有提供,封装了Man和Woman这两个类,外部的对象只能访问提供的接口,却不能访问没有的接口。
所谓封装,就是把属性私有化,通过想提供给外部访问的访问的方法提供给外部访问,这个例子,还没有体会到封装的好处,下面就先不采取封装来重新上面的那个Man.java:
public class Man{
public String name;
public String sex;
public double salary;
}
我们会这样使用:
Man man=new Man();
man.name="张三";
man.sex="男";
man.salary=10000.00;
设想一下,这样一个赋值没有什么问题,我们需要修改Man类,将age的数据类型改为String,修改这一个地方还好,加入需要修改几百个地方,是不是感觉很崩溃,如果使用的封装,只需要修改Man中的属性的数据类型以及对应的set方法就可以了,无需修改客户的代码,这就看出了封装可以对类的内部结构进行自由的修改的好处。
下面我们来看下封装的更加精确的控制变量的好处:
public class Woman{
public String name;
public String sex;
public int age;
}
我们会这样使用:
Woman woman=new Woman();
woman.name="翠花";
woman.sex="女";
women.age=1000;
这样明显的看出对于age的赋值是不对的,没有使用封装情况下不能对变量精确的控制,使用封装可以这样来判断:
public void setAge(int age) { if(age<1200{ this.age = age;} else{logger.error("age赋值不恰当");}
封装的基本知识就介绍到这,下一篇java的三大特性--继承。