封装性

我要用洗衣机,只需按开关即可,无需了解洗衣机的内部结构。

以上这句话可能大家在搜索学习封装性的时候可能都听过,可是这句话严重误导了我。可能是由于面向过程的学习太过深刻,我联想到了函数,函数不就是把洗衣服的过程全部“封装”起来了吗?我只需要调用函数方法就可以了呀,确实无需了解函数内部是怎么写的。那这是“封装”吗?答案:不全面

通俗地讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。

所谓封装,就是把客观事物封装成抽象概念的类,并且类可以把自己的数据和方法只向可信的类或者对象开放,向没必要开放的类或对象隐藏。外界无法直接进行修改等操作,只能通过给定的当时进行访问和修改。

为了实现隐藏或暴露的不同权限,就要用到权限修饰符:

修饰符 本类内部 本包内 其他包的子类 其他包非子类
private
缺省
protected
public

注意:外部类只能用public、缺省修饰;其它则上述四种均可。

封装性的经典体现:

  1. 私有化(private)类的属性,外界无法直接进行修改等操作,只提供给定的公共的(public)set\get方法进行访问和修改。
//学生类
public class Student {
    private String name;
    public Student(String n){
        this.name=n;
    }
    public String getName(){
        return this.name;
    }
    public void setName(String n){
        this.name=n;
    }
}
//测试运行类
public class Main {
    public static void main(String[] args) {
        Student s1=new Student("小杰");
        System.out.println(s1.getName());
        s1.setName("小红");
        System.out.println(s1.getName());
        
    }
}

这就是封装性的一个经典使用案例,外界只能通过给定的set\get方法访问和修改name这个属性,而不能通过对象直接调用属性,如s1.name就是错误的,因为name属性是私有的。

那很多人就会想着说,这到底有什么用呢?name属性不也一样是被修改了吗?其实我也有这个疑问,就上面这个例子来说,其实可以在set方法中添加一些合法性检验,比如:

    public void setName(String n){
        if(n.length()<2){
            System.out.println("Error,不合法");
            return;
        }

在网上找的课程上说,这是”提高系统的安全性,隐藏代码的实现细节“。有没有人能结合具体的案例说一下这么封装的作用到底是什么呢😢😢😢😢😢😢

  1. 类中不需要对外暴露的方法,即仅供类内使用的方法,将其设置为private。

封装性也体现了我们程序设计对于“高内聚,低耦合”的追求。在封装性中,高内聚就是类内部数据的操作细节自己完成,不允许外部干涉,低耦合就是仅暴露少量的方法给外部使用。