面向对象--封装
封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
- 隐藏实现细节,提供公共的访问方式
- 提高了代码的复用性
- 提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。
程序示例
/*
定义一个学生类:
成员变量:姓名,年龄
成员方法: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();
}
}