> 文档中心 > 面向对象三大特性01-封装详解

面向对象三大特性01-封装详解


1. 封装(属性私有,get/set)

代码示例: 

如上图Student类中,id属于私有属性,也就是不供外界调用.也就是属性前面加了关键字private,显然是会报错。

1.1 什么是封装?

  •  该露的露,该藏的藏。设计程序讲究“高内聚,低耦合”, 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合:仅仅暴露少量的方法给外部使用。
  • 封装,实际上可以理解为数据的隐藏。通常情况下,应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来进行访问,也就是所谓的信息隐藏。

1.2 为什么要封装?也就是等同于封装之后有啥好处呢?

代码示例:

如何通过公开的方法(也就是提供的接口方法)来对私有的属性进行调用?

package oop.Demon04;//类 private 私有public class Student {    //属性私有    private String name; //名字    private int id;  //id    private char gender; //性别    //提供一些可以操作这个属性的方法    //提供一些public的get set 方法    //get 获取这个数据    public String getName() { return this.name;    }    //set  给这个数据设置相应的值    public void setName(String name) { this.name = name;    }}

 通过上面的代码,很显然能够看出通过公开的get/set接口方法,实现了对私有属性的访问。同时又没有暴露具体的细节。也就是你只管调用就行了,至于类里面的具体的代码实现,你是不知道的,只不过上面都是基于上帝视角而已。

==================================================================

        当然,如何一键快速生成get/set方法呢?

*idea快捷键:alt+insert  经常会使用。

public int getId() { return id;    }public void setId(int id) { this.id = id;    }public char getGender() { return gender;    }public void setGender(char gender) { this.gender = gender;    }

        ===========================================================

代码示例:

ackage oop.Demon04;//类 private 私有public class Student {    //属性私有    private String name; //名字    private int id;  //id    private char gender; //性别    private int age;    //提供一些可以操作这个属性的方法    //提供一些public的get set 方法    //get 获取这个数据    public String getName() { return this.name;    }    public int getId() { return id;    }    public void setId(int id) { this.id = id;    }    public char getGender() { return gender;    }    public void setGender(char gender) { this.gender = gender;    }    public int getAge() { return age;    }    public void setAge(int age) { this.age = age;    }    //set  给这个数据设置相应的值    public void setName(String name) { this.name = name;    }}

我们知道年龄肯定不可能有999这么一说,显然上述是不合法的数据。如何在程序中规避这些不合法的输入呢?------>封装,由于我们封装过,可以在set里面做一些安全性的检查。也就是说我们可以通过一些内部的封装,来使程序变得安全。(我想这个思想就是封装的本质了)

例如:

public void setAge(int age) { if(age>120||age<0){     System.out.println("不合法的年龄"); }else {     this.age = age; }    }

显然通过上面的限制,在输入999的时候,程序就会显示不合法输出。

封装的好处?

  1.  提高安全性,保护数据
  2. 隐藏代码的实现细节,也就是做了调用者,类里面的代码细节是不清楚的。
  3. 统一接口,所有的方法都是get/set
  4. 提高了系统的可维护性。

面向对象三大特性01-封装详解 创作打卡挑战赛 面向对象三大特性01-封装详解 赢取流量/现金/CSDN周边激励大奖