7.封装

封装:
其实就是大家字面上所能看到的那种意思,把一个东西封装,装起来,只留一个口,只有那个口才能让别人拿到。比如看电视的时候,我们只需要拿遥控器换一下台就可以了,没有必要去了解电视机内部的构造,你也没有必要去碰那些显像管,那些制造的厂家为了我们方便的去使用电视,它就把内部非常复杂的一些细节,全部都给它封装起来了,值给我们暴露一些简单的接口。这样的话,你如一个电源开关,比如说一个换台键,这样的话,用户就可以玩了,不需要让用户全部了解里面的产品的所有东西。这就是封装。
该露的露,该藏的藏:我们要把该暴露给用户的一些东西给暴露出来,但大部分程序的一些细节,都应该藏起来。我们程序设计要追求“高内聚,低耦合”高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;比如银行的钱,他只能由银行内部人员操作,不应该让所有人操作,每个人只能操作自己当前的那个账户。低耦合:仅暴露少量的方法给外部使用比如说,都是去取钱,能取钱的是不是只有一些普通的用户才可以,而顾客不能操作里面的钱,不能把钱借给别人。顾客的所有东西只能围绕着那张小卡来,方法是有限的。
代码中呢,记住这句话:属性私有,get/set,有时候set方法里会做一些安全性的验证的判断。
 
封装的意义:
  • 提高程序的安全性,保护数据
  • 隐藏代码的实现细节:刚才的设计年龄,用户只能去设置年龄,而里面的细节他是根本不知道的,作为一个调用者,他根本不知道类里面到底干了什么,当然我们时上帝视角,我们是开发人员,我们肯定知道。
  • 统一接口:就是所有的方法都是get、set、形成了一个规范,用户调用的接口那就是这一个。
  • 系统的可维护性增加了:良好的封装便于我们修改内部代码,可以提高咱们程序的可维护性。
 
通常把数据封装(数据的隐藏),避免程序去直接访问一个对象中数据,而应通过接口方法来进行操作。

 1 package com.oop.demo03;
 2 
 3 //类     private:私有
 4 public class Student {
 5 
 6     //属性私有
 7     private String name;//名字
 8 
 9     private int id;//学号
10 
11     private char sex;//性别
12 
13     private int age;//年龄
14 
15     //提供一些可以操作这个属性的方法!
16     //提供一些public的get set方法 快捷键:alt+insert -->setter getter
17 
18     //get 获取这个数据
19 
20     public String getName() {
21         return name;
22     }
23 
24     //set 给这个属性设置值
25 
26     public void setName(String name) {
27         this.name = name;
28     }
29 
30     public int getId() {
31         return id;
32     }
33 
34     public void setId(int id) {
35         this.id = id;
36     }
37 
38     public char getSex() {
39         return sex;
40     }
41 
42     public void setSex(char sex) {
43         this.sex = sex;
44     }
45 
46     public int getAge() {
47         return age;
48     }
49 
50     //通过一些内部的封装让程序变的更安全、避免用户破坏系统
51     public void setAge(int age) {
52         if (age > 120 || age < 0) {
53             age = -1;
54         } else {
55             this.age = age;
56         }
57     }
58 
59 }
 1 package com.oop;
 2 
 3 import com.oop.demo03.Student;
 4 
 5 public class Application {
 6 
 7     public static void main(String[] args) {
 8         Student s1 = new Student();
 9 
10         s1.setName("断浮");
11 
12         System.out.println(s1.getName());//
13 
14         //s1.setAge(999);//不合法
15         s1.setAge(70);
16         System.out.println(s1.getAge());//70
17     }
18 
19 }

 

 
posted @ 2020-01-21 17:30  断浮  阅读(126)  评论(0编辑  收藏  举报