Day19:属性封装详解

属性封装详解

封装即隐藏一些数据,让外部不能直接访问,而是需要通过一些方法才能设置或者访问。

首先我们来看未封装的属性被外部调用的情况

public class Students{//创建一个学生类
    String name;//定义属性未赋值
    int age;
}
public class Application{
    public static void main(String[] args){
        Students s1=new Students();//学生类实例化
        //属性赋值
        s1.name="工地佬";
        s1.age=-10;
        System.out.println("名字:"+st1.name);
        System.out.println("年龄:"+st1.age);
    }
}
//输出结果为
名字:工地佬
年龄:-10

通过上面的代码我们发现输出的年龄中出现了-10;生活中一个人的年龄不应该出现负数,出现这种错误的原因是因为外部程序能够直接访问到Students类中的属性并加以赋值,为了避免这种错误产生,我们要避免属性能够被直接访问,在Java中在属性前加上“private”关键词可以将属性私有化,使得外部程序不能直接访问。


当我们封装属性时

观察上方代码,我们发现右边Students类中没有封装的属性name在左边中依然可以直接访问,而属性age因为加了private进行修饰成为了类中私有化的属性,左边的程序不能访问age

但是当一个类中的属性不能被访问,那么将毫无意义;而Java中对于封装的属性提供了get、set方法来进行访问

我们通过快捷键可快速生成访问封装属性的方法:alt+insert

此时我们设置封装属性的值并输出:

当们设置并得到了封装属性的值,但我们观察结果发现我们的对象的年龄还是不合法;这个时候我们应该在方法里面加入一些逻辑判断,让我们的方法更加完善。

总结:

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

  2. 隐藏代码的细节,留给用户的只有一个设置功能,内部的操作无法访问

  3. 统一接口

  4. 提高系统的可维护性

posted @   工地佬  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示