Day32--封装

Day32--封装

该露的露,该藏的藏。

就像电视,大多数的数据线都隐藏起来了,只暴露出少量的接口和按键。我们不需要知道电视的具体构造,只用知道如何使用遥控器就行了。
我们程序设计要追求高内聚、低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

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

记住这句话就够了:属性私有,get/set。

封装主要是针对属性,很少针对方法

举例:

package com.liu.oop.demo04;

//private   私有
public class Student {

    private String name;   //    名字

    private int id;  //    学号

    private char sex;  //    性别
}

此时,属性的修饰符是private

package com.liu.oop;

import com.liu.oop.demo04.Student;

public class Application {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.name
    }
}

此时,想要访问s1的name属性,但是会报错

image-20241117210403215

由于属性私有,所以即使在其他的类对对象初始化,也无法操作属性

所以这个时候,就要在私有属性旁,提供一些可以操作这个属性的方法

提供一些public的get、set方法

快捷键快速生成get、set方法:

Alt+Insert---->Getter\Setter

快捷键 s1.getName().sout

package com.liu.oop.demo04;

//private   私有
public class Student {
    //属性私有

    private String name;   //    名字

    private int id;  //    学号

    private char sex;  //    性别

    //提供一些可以操作这个属性的方法
    //提供一些public的get、set方法

    //get  获取数据
    public String getName(){
        return this.name;
    }

    //set  为数据设置值
    public void setName(String name){
        this.name=name;
    }
}

此时

package com.liu.oop;

import com.liu.oop.demo04.Student;

public class Application {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("刘");
        System.out.println(s1.getName());
    }
}

这里。没有直接操作属性,但是通过一些外部的方法操作属性

有时候,要对方法进行限制

​ 年龄要进行限制

 public void setAge(int age) {
        if (age <=130 && age > 0) {
            this.age = age;
        }else {
            this.age = 0;
        }
    }

此时

s1.setAge(1300);
        System.out.println(s1.getAge());  //0
/*
封装的意义
1. 提高程序的安全性,保护数据。
2. 隐藏代码的实现细节。 用户只用输入年龄,不用知道具体的代码实现细节
3. 统一接口。   get/set
4. 系统可维护性增加了。
 */
posted @ 2024-11-17 21:33  1hahahahahahahaha  阅读(2)  评论(0编辑  收藏  举报