好的。从第一次了解封装及其数据隐藏属性开始,我仍然无法理解一点:标有修饰符的类字段private对其他类不可用——这一点很清楚。
比方说:
public class Solution {
public static void main(String[] args) {
}
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) { // этот метод противоречит принципам инкапсуляции
this.name = name;
}
}
}
当我们调用方法setName("Васька")时,它会改变字段的值吗?如果是这样,那对我来说不是很清楚。我的意思是:如果我们用访问修饰符标记字段会有什么不同private?如果我们通过 setter 访问它并根据需要更改它的值?
也许我不会再画这辆自行车了,因为互联网上有很多类似你的问题——例如:Java 中的 Getters-setters,或者另一个:Java。为什么公共领域的 getter 和 setter?(除了检查),这里也有很好的答案:如果有反射,是否存在封装?.
简而言之:遵守OOP范式,封装;为了代码的方便和美观;对用户隐藏实现;这样在继承的类中,或者实现你的接口,你可以重写获取所需字段的值,等等。
而且,是的:事实上,您无法访问该字段,您可以访问返回一个或另一个参数值的方法。此外,该方法可能并不总是返回/设置字段值本身。正如上面列出的问题之一的答案中正确指出的那样,由于封装,那些将使用您的类的用户将知道哪些字段可以读取,哪些字段可以覆盖,哪些字段根本不应该被触及。是的,而且对你来说会更方便,尤其是在很长一段时间后需要返回这个代码的时候。