封装
面向对象三(四)大特性之一
目的
保护类中的属性,阻止在外部随意 访问、修改 属性。例子:你们家的钱肯定要保护好,不能让外人花
隐藏细节,将一些算法、操作封装到方法中。比如取款机中的键盘,用户只需要知道按哪个键实现什么操作就可以,至于它内部是如何运行的,用户不需要知道。

不封装的缺点
public class Student {
String name;
int age;
}
public class Test {
public static void main(String[] args) {
Student lilei=new Student();
lilei.name="李雷";
// lilei.age=20;
lilei.age=200;//数据出问题了,程序仍正常运行
lilei.age=-20;//数据出问题了,程序仍正常运行
}
}
对成员变量的封装
将成员变量 隐藏 起来,若需要访问、修改某个属性,提供 公共方法 对其访问、修改。
封装的步骤
使用
private关键字来 修饰成员变量。如果需要 访问 成员变量,提供 getter方法
如果需要 修改 成员变量的值,提供 setter 方法
private权限修饰符
private的含义
- private是一个权限修饰符,代表最小权限。
- 可以修饰 成员变量 和 成员方法。
- 被private修饰后的成员变量和成员方法,只能在 本类中访问。
private的使用格式
private 数据类型 变量名;
例子
使用 private 修饰成员变量
public class Student {
private String name;
private int age;
}
提供 getter 方法 / setter 方法
这种类也叫 java bean
通过 getter方法 / setter方法 访问成员变量,代码如下:
public class Student {
private String name;
private int age;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int age) {
if(age<0 || 180<age){//保护作用,过大过小都会提示
System.out.println("年龄设置错误!");
return;//不在继续往下执行,跳出方法继续执行
}
this.age = age;
}
public int getAge() {
return age;
}
}
测试
public class Test {
public static void main(String[] args) {
Student lilei=new Student();//通过new关键字调用无参构造方法(默认构造方法),我们没有定义,那么java编译器给我们提供了构造方法
lilei.name="李雷";
// lilei.age=20;
lilei.age=200;//数据出问题了,程序仍正常运行
lilei.age=-20;//数据出问题了,程序仍正常运行
lilei.setName("李雷");
// lilei.setAge(20);
// lilei.setAge(-20);
lilei.setAge(200);
System.out.println(lilei.getName());
System.out.println(lilei.getAge());
}
}