封装
封装的意思是,确保对外隐藏“敏感”数据。为此,你必须:
- 将类变量/属性声明为
private
(只能在本类中访问) - 提供公共的
setter
和getter
方法,来访问和更新私有变量的值
Get 与 Set
私有变量只能在同一个类中访问(外部类不能访问)。但是,可以通过公共的getter
和setter
方法访问它们。
get
方法返回变量值,set
方法设置值。
两者的语法都是以get
或set
开头,然后是变量的名称,第一个字母大写:
示例
public class Person {
private String name; // private = 限制访问
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
get
方法返回变量值。
set
方法接受一个参数(newName
),并将其赋给name
变量。this
关键字用于引用当前对象。
由于name
变量被声明为private
,所以不能从这个类之外直接访问它:
示例
public class MyClass {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "Kevin"; // 错误
System.out.println(myObj.name); // 错误
}
}
然而,当我们试图访问一个私有变量时,我们得到一个错误:
MyClass.java:4: error: name has private access in Person
myObj.name = "Kevin";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
但是,我们可以使用getName()
和setName()
方法来访问和更新变量:
示例
public class MyClass {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("Kevin"); // 将name变量的值设置为“Kevin”
System.out.println(myObj.getName());
}
}
// 输出 "Kevin"
为什么使用封装?
- 更好地控制类的属性和方法
- 类变量可以设置为只读(如果省略了set方法),或者只写(如果省略了get方法)
- 灵活性: 程序员可以更改代码的一部分而不影响其他部分
- 提高数据安全性