2018-04-30
理解封装思想
封装就是将属性私有化,提供公有的方法访问私有的属性。
*实现封装的步骤:
(1)修改属性的可见性来限制对属性的访问。
(2)为每个属性创建一对赋值(set方法)方法和取值(get方法)方法,用于对这些属性的访问。
(3)在赋值和取值方法中,加入对属性的存取限制。
**为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。
**如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。
public class AccpTeacher{
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return name;
}
public void setName(String age){
if(age<22){
System.out.println("年龄不符合,太小!");
}else{
this.age = age;
}
}
}
****封装的好处:
(1)隐藏类的实现细节;
(2)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制
逻辑,限制对属性的不合理操作;
(3)便于修改,增强代码的可维护性;
----------------------------------------------------------------------
eg:
保存联系人功能:void save(String name,int age,String phoneNumber,String email,String Address...)因为保存联系人时,可以保存多个信息,那么保存方法就必须设置成具有多个参数的。发现问题:方法的参数列表出现爆炸式增长。把联系人的信息看成一个整体。class LinkMan{ String name;int age;String Address;String phoneNumber;String email;}上述保存联系人的方法;void save(Linkman man){}--------------------------------------------------------------------------------------
什么是封装(面向对象的三大特征之一):
1.把对象的状态(属性/字段)和行为(功能/方法)看成一个统一的整体,将二者存放在一个独立的模块中(一个类中)。2.“信息隐藏”:把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,向外暴露方法,保证外界安全(把所有数据信息隐藏起来,尽可能隐藏多的功能,只向外暴露便捷的方法,以供调用)。------------------------------------------------------------------------------------------------------------------------------------------------------------------------------通过什么来实现隐藏和暴露功功能呢?高内聚:把该模块的内部数据、功能细节隐藏在模块内部,不允许外界直接干预。低耦合:该模块只需要给外界暴露少量功能方法。----------------------------------------------------------------------------------------------------------------
可以把上述代码改成这样,以体现封装性:class Person{ String name; private int age;//只能在本类中使用age变量。 void setAge(int a) { if(a<0) { System.out.println("年龄不能为负数"); return;//表示结束方法 } age = a; } }//演示封装class PersonDemo{ public static void main(String[] args) { Person p = new Person(); p.name = "BaiHe"; p.setAge(17); System.out.println(p.name + ","+p.age); }}