zoukankan      html  css  js  c++  java
  • 二、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);
      }
    }

  • 相关阅读:
    c# in deep 之LINQ简介(1)
    今天开通博客
    bzoj 4009 接水果 整体二分
    区间求mex的几种方法
    充分性,必要性,充分条件,必要条件的区别
    表达式求值(noip2015等价表达式)
    selenium-模拟鼠标
    selenium学习-ActionChains方法列表
    高手指导中手的书籍
    新生
  • 原文地址:https://www.cnblogs.com/sunNoI/p/8974045.html
Copyright © 2011-2022 走看看