Set和Get的基本使用
1、问题的产生:
例如定义一个Student
类,我们给它两个字段:
class Student {
public String name;
public int age;
}
把字段用piblic
修饰可能会破坏封装性。例如外部代码可以随意对字段进行赋值操作:
Student liu = new Student();
Liu.name = "Xiao Liu";
Liu.age = -1;//造成逻辑混乱,且易被外部代码修改
为此,我们用private
修饰,拒绝外部访问:
class Student {
private String name;
private int age;
}
此时再对字段赋值会发生错误:
Main.java:5: error: name has private access in Person
ming.name = "Xiao Liu"; // 对字段name赋值
^
Main.java:6: error: age has private access in Person
ming.age = -1; // 对字段age赋值
^
2 errors
error: compilation failed
此时如何对字段进行赋值和取值操作?
2. 问题的解决:set()和get()的引入
外部代码不能修改private
字段,但可以通过在类内定义一个修改private
字段的方法,让外部代码调用此方法从而间接的修改private
的值。同时还可以规范字段的逻辑性:
class Student {
private String name;
private int age;
public void setNema(String name){
this.name = name; //修改name字段
}
public String getName() {
return name; //调用name字段
}
public void setAge(int age){
if(age < 0 || age > 120){
thorw new IllegalArgumentException("invalid age value");
} //规范字段逻辑
this.age = age;
}
public int getAge(){
return this.age;
}
}
设置完set()
和get()
方法后,类外部就可以对方法进行调用从而修改类内的private字段,保证了封装性的完整:
public class Main {
public static void main(String[] args) {
Student liu = new Student();
liu.setName("Xiao Liu"); // 设置name
liu.setAge(12); // 设置age
System.out.println(liu.getName() + ", " + liu.getAge());
}
}
参考文章:链接