Tra*_*nee 5 java encapsulation
如果下面的代码会产生相同的结果,为什么我应该使用封装?
封装的主要好处是能够修改我们实现的代码,而不会破坏使用我们代码的其他人的代码。
但我可以在不使用封装的情况下使用这个好处,对吗?因为每个物体的场都彼此不同。
// Person.java
public class Person {
// Plain
public String name;
// Uses encapsulation
private String name2;
public void setName(String name2) {
this.name2 = name2;
}
public String getName() {
return name2;
}
}
// Main.java
public class Main() {
public static void main(String[] args) {
// Plain
Person person = new Person();
person.name = "Jordan";
System.out.println(person.name);
// Uses encapsulation
Person person2=new Person();
person2.setName("Jordan");
System.out.println(person2.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
你的问题很有趣。我将尽力为您深入解答。
封装背后的主要思想是向其他用户隐藏数据及其实现细节。如果我们将数据成员设为私有,那么它只能在同一个类中访问。没有其他类可以直接访问该数据。
但我们可以定义一个接口,即公共 getter 和 setter 方法来更新其他类的数据。这可确保其他人无法访问私有数据,并且只能通过您提供的公共方法访问。
例如,您可能决定只为特定数据成员提供 getter 方法,而不提供 setter 方法。这确保没有其他类可以以任何可能的方式更改或更新您的数据成员。他们只能使用 getter 方法获取值。
这就是为什么封装也称为数据隐藏。
public class EncapsulationDemo{
private int ssn;
private String empName;
private int empAge;
//Getter and Setter methods
public int getEmpSSN(){
return ssn;
}
public String getEmpName(){
return empName;
}
public int getEmpAge(){
return empAge;
}
public void setEmpAge(int newValue){
empAge = newValue;
}
public void setEmpName(String newValue){
empName = newValue;
}
public void setEmpSSN(int newValue){
ssn = newValue;
}
}
public class EncapsTest{
public static void main(String args[]){
EncapsulationDemo obj = new EncapsulationDemo();
obj.setEmpName("Mario");
obj.setEmpAge(32);
obj.setEmpSSN(112233);
System.out.println("Employee Name: " + obj.getEmpName());
System.out.println("Employee SSN: " + obj.getEmpSSN());
System.out.println("Employee Age: " + obj.getEmpAge());
}
}
Run Code Online (Sandbox Code Playgroud)
1)它为代码提供了灵活性并使其易于维护。我们可以更改getEmpName()或setEmpName()不影响任何其他外部代码的实现。
2) 我们可以随时将数据成员设置为只读(仅定义 getter)或只写(仅定义 setter)。
3)其他用户将不知道幕后发生了什么。他们只会知道要更新数据,我们需要调用 setter 方法,而要获取数据,我们需要调用 getter 方法。