我很困惑,因为我一直听到的是 Java 中的私有变量应该保护代码或变量。但是如果任何人都可以访问代码,那么它是否是私有的就没有区别,他们仍然可以更改它。那么,当有权访问代码的任何人都可以更改它时,它如何被视为受到保护呢?
原文由 Fido Dido 发布,翻译遵循 CC BY-SA 4.0 许可协议
我很困惑,因为我一直听到的是 Java 中的私有变量应该保护代码或变量。但是如果任何人都可以访问代码,那么它是否是私有的就没有区别,他们仍然可以更改它。那么,当有权访问代码的任何人都可以更改它时,它如何被视为受到保护呢?
原文由 Fido Dido 发布,翻译遵循 CC BY-SA 4.0 许可协议
变量是私有的,以保护对象的状态——在面向对象的编程术语中,这称为 封装。
这是一个非常简单的例子。想象一下,我们有一个 Person 类,并且一个 Person 的年龄是根据他们出生的年份计算的。
class Person {
private int yearOfBirth;
private int age;
public Person(int yearOfBirth) {
this.yearOfBirth = yearOfBirth;
this.age = Calendar.getInstance().get(Calendar.YEAR) - yearOfBirth;
}
public int getAge() {
return age;
}
}
在某个地方的另一个类中,我们有这个……如果年龄是公开的,我们真的可以通过在不更新出生年份的情况下更改它来弄乱我们的对象的状态。
public static void main(String[] args) {
Person bob = new Person(2000);
System.out.println("Bob's age: " + bob.getAge());
bob.age = 100; //This would be BAD!
}
通过封装 age 变量,它可以免受意外更改的影响,并且我们的类可以管理自己的状态。使用我们类的任何人都不必关心计算一个人的年龄,因为它封装在我们的类中。
原文由 Riaan Nel 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
当程序员谈论访问变量时,他们指的是在程序运行时访问它的 值。保护代码免受更改完全是另一回事,需要人工处理而不是编程语言的语法。将变量设为私有可在代码运行时“保护”其值。在这个级别,我们不关心保护它免受其他程序员更改代码本身的影响。所谓“数据隐藏”的要点是对使用该类的其他类隐藏内部数据。那些其他类应该只通过调用类上的方法来访问行为,而不是通过直接更改变量的值来访问行为。
遵循“数据隐藏”等一般编程原则,以帮助我们作为程序员编写正确的代码。如果任何类都可以更改变量的值,则很难确保该值有效。例如,您有一个变量,用于计算工厂生产的小部件数量。通过使变量成为私有数据成员,您可以更轻松地确保该值永远不会为负。另一方面,如果变量是公共变量,另一个类可能会将其更改为负值,这会导致代码的其他部分崩溃。