面向对象--封装

封装概述

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:

  • 隐藏实现细节,提供公共的访问方式
  • 提高了代码的复用性
  • 提高安全性。

封装原则:

将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。 

程序示例

/*

定义一个学生类:
成员变量:姓名,年龄
成员方法:show()

我们在正常开发的过程中,发现一个问题:
我们通过  对象.变量名  的形式给成员变量进行赋值,在赋值年龄的时候
我们居然可以赋值一些不合理的数据,比如我赋值10000
根据现实实际情况来看,年龄赋值10000是不合理。

想一想,如果我们在赋值的时候,加一个判断,校验一下,

如果合理,就允许赋值,如果不合理,就不允许赋值。
那么,我们在哪里加入判断比较合适呢?

StudentDemo1是一个测试类,测试类中一般情况下,只允许创建对象,调用方法或者访问成员变量

所以,我们把添加判断的逻辑代码放到Student2类中
而我们的类中有成员变量,成员方法。
成员变量上只能是定义成员变量,加不了判断。
我们经过考虑后决定,另外写一个成员方法,来为年龄进行赋值,在赋值的时候加入判断

虽然我们加入了一个方法传参的形式去给成员变量进行赋值,并且在赋值的时候进行判断
但是呢,我偏偏不使用定义的方法,就使用  对象名.成员变量  的形式去赋值,依旧可以赋值一些
不合理的值。如果有一个办法可以让外界不能直接的访问到成员变量就好了,这样如果想要
进行对成员变量赋值,就不能通过对象名.成员变量的形式去赋值,只能通过我们定义的方法
赋值。
有这样的方法,java替我们考虑到了这样的情况,提供了一个关键字给我们使用
这个关键字叫做:private

                private: 私有的意思,使用private修饰的成员变量,在其他类中不能直接访问

                说到现在的案例,主要引出一个思想:面向对象的三大特征之一-----封装

                封装:
                    实际上就是隐藏对象的属性和相关实现细节,仅仅对外提供公共的访问的方式。

*/

class Student2 {
    //定义成员变量
    String name;
    private int age;

    public void setAge(int x){
        if(x>0 & x<=100){
            age = x;
        }else {
            System.out.println("输入的年龄有误");
        }

    }

    //输出打印该对象的所有成员变量
    public void show() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}


public class StudentDemo1 {
    public static void main(String[] args) {
        //创建Student2的对象
        Student2 s1 = new Student2();
        s1.show();
        //给对象的成员变量进行赋值
        s1.name = "李玉伟";
//        s1.age = 18;
        s1.show();

//        s1.age = 10000;
        s1.setAge(100);
        s1.show();

    }
}
posted @ 2021-12-03 23:22  赤兔胭脂小吕布  阅读(26)  评论(0编辑  收藏  举报