【学习笔记】封装

封装

封装两字就如其字面含义,把一个东西装起来,装到一个箱子里面,只留一个口,让别人去拿到它。

比如我们看电视时,我们没有必要去了解它内部是怎么实现的,只需要去拿遥控器去换台,所以电视厂家就把内部复杂的细节封装起来,只给我们暴漏一些简单的接口:电源、遥控器。。。。。。

该露的露,该藏的藏

在我们程序中要追求“高内聚,低耦合” 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉; 低耦合:仅暴露少量方法给外部使用

封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏

记住这句话:属性私有,get/set

在代码中这样表现:

我们先创建一个Student类,它有姓名、年龄等属性

之前我们在主程序中可以直接调用到这个类的属性即名字、年龄等,原因是这些属性的权限都是public

package com.oop.demo03;
​
public class Student {
    public  String name;
    public  int age;
}
package com.oop;
​
import com.oop.demo03.Student;
​
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "zhangsan";
    }
}

 

封装的意思就是把public 换成private(私有的),这是我们在直接去调用就会报错

image-20220717161918099

 

这就是属性私有

 

把属性的权限换成private 之后,我们不能直接调用了,应该怎么办呢?

这时就用到了第二句话:get/set

我们在这个类中写一些get和set方法,把get/set方法的权限设置成public(公有的)以供主程序调用

package com.oop.demo03;
​
public class Student {
    private  String name;
    public  int age;
    
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
}
package com.oop;
​
import com.oop.demo03.Student;
​
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三");
        System.out.println(student.getName());
    }
}

image-20220717162846456

 

生成get/set方法 快捷键:alt + insert

 

封装的用处?

我们继续看上面的例子,如果用户调用setAge方法给这个对象的age设置值,设置了一个不合法的数值,比如:999、-1 等

我们就可以在setAge方法中进行合法性的校验,去规避掉用户的一些不合法输入。

  public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        if (age > 120 || age <0  ){
            this.age = 0;
        }else{
            this.age = age;
        }
    }
package com.oop;
​
import com.oop.demo03.Student;
​
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三");
        System.out.println(student.getName());
        student.setAge(99);
        System.out.println("学生的年龄为:"+student.getAge());
    }
}
​

总结 封装的意义

1.提高程序的安全性,保护数据

2.隐藏代码实现细节

3.统一接口

4.程序可维护性增加

 
posted @ 2022-07-17 16:45  GrowthRoad  阅读(23)  评论(0编辑  收藏  举报