先来看一段例子,如果没有封装的代码会出现一些问题
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "张三";
stu.age = -18; //这里年龄不合理
stu.major = "软件技术";
System.out.println(stu.toString());
}
}
class Student{
String name;
int age;
String major;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", major=" + major + "]";
}
}
上述代码中,对于年龄等属性的赋值没有限制,会导致输入的常量不符合实际情况,而编译器又无法检查出来的问题。
所以我们应当引入封装的思想,处理类的属性。
#########类属性的处理方法
1.一般使用private访问权限
2.提供相应的get/set方法来访问相关属性,这些方法通常是用public修饰的。以提供对属性的赋值与读写的操作 (注意 boolean变量的get方法是is开头)
3.一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方式用public修饰。
此时就不可以直接操作类的属性
通过对象的方法实现对属性的赋值,并在set方法中,设置标准要求,得到以下的效果
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("张三");
stu.setAge(-18);
stu.setMan(false);
System.out.println(stu.toString());
}
}
class Student{
private String name;
private int age;
private String major;
private boolean man;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<=0) {
System.out.println("请输入正确的年龄");
}else {
this.age = age;
}
}
public boolean isMan() {
return man;
}
public void setMan(boolean man) {
this.man = man;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", major=" + major + "]";
}
}
运行结果