封装的概念
- 通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值(比如年龄是500). 无论是编译阶段还是运行阶段都不会报错或者给出提示, 此时与现实生活不符
- 为了避免上述错误的发生, 就需要对成员变量进行密封包装处理,来隐藏成员变量的细节以及保证成员变量数值的合理性, 该机制就叫做封装
封装的实现流程
- 私有化成员变量, 使用
private
关键字修饰 - 提供公有
get
和set
方法, 并在方法体中进行合理值的判断 - 在构造方法中调用
set
方法进行合理值的判断
案例题目
提示用户输入班级的学生人数以及每个学生的信息, 学生的信息有:学号, 姓名, 最后分别打印出来
public class Student {
// 封装第一步: 将变量私有化, 加private关键字
private int id; // 自定义成员变量, 用于保存学生学号
private String name; // 自定义成员变量, 用于保存学生姓名
// 封装第三步: 在公有的构造方法中调用set方法进行合理值的判断
public Student() {
}
public Student(int id, String name) {
//this.id = id;
//this.name = name;
setId(id);
setName(name);
}
// 封装第二步: 提供公有化的get和set方法, 对变量进行合理化判断
// 公有化是加public关键字
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) { // 形参中记得加变量类型; 没有返回值要加void
if(id > 0) this.id = id;
else System.out.println("学号有误,请检查");
}
public void setName(String name) {
this.name = name;
}
// 自定义成员方法, 用于打印学生学号与姓名
// 没有任何修饰词的方法的私密级别介于private与public之间
public void show() {
//System.out.println("学号为" + id + "的学生姓名是" + name);
System.out.println("学号为" + getId() + "的学生姓名是" + getName());
}
}
封装好Student类
之后,创建StudentTest测试类
,对封装好的类进行测试
public class StudentTest {
public static void main(String[] args) {
// 声明Student类的引用, 指向类的对象
Student s1 = new Student();
// 对成员变量进行赋值并打印
// s1.id = -1107;
// s1.name = "wdm";
s1.setId(-1107);
s1.setName("wdm");
s1.show();
System.out.println("-----------------------");
// 使用有参方式构造方法并打印特征
Student s2 = new Student(-1108, "xx");
s2.show();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。