• 二、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);
      }
    }

  • 相关阅读:
    IELTS Writing Task 2: 'music' essay
    leetcode 368. 最大整除子集
    820复试算法 快排找第 k 小
    ASP.NET后台生成随机验证码
    Oracle身份证验证方法
    ASP.NET 存储过程导入(oracle)返回导入成功数和导入失败数
    C#执行参数为游标 返回一个记录集的Oracle存储过程
    C#执行带参数的Oracle存储过程
    往ORACLE数据库中插入XML数据
    存储过程 将数据插入到临时表,再根据条件判断 插入到不同的表
  • 原文地址:https://www.cnblogs.com/sunNoI/p/8974045.html
Copyright © 2020-2023  润新知