• 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. 提高系统的可维护性

  • 相关阅读:
    数据结构—快速排序(续)
    新出现的去中心化科学能够为科学领域带来什么?
    微信的个人号接口
    Taro小程序富文本解析4种方法
    入门 Teams Toolkit
    Python调用域控
    面试被吊打系列:Android 性能优化应该怎么学?
    Lua中如何实现类似gdb的断点调试—07支持通过函数名称添加断点
    LeetCode 94 Java 实现
    使用hyper-V 编译和调试Android13(android-13.0.0_r3)源码
  • 原文地址:https://www.cnblogs.com/CQliuwei/p/16916369.html