二、Java面向对象(7)_封装思想——理解封装思想

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);
  }
}

猜你喜欢

转载自www.cnblogs.com/sunNoI/p/8974045.html