下午好。例如,我们在 java.com.test; 包中有一个类:
银行
package java.com.test;
public class BankAccount {
private int balance;
public class BankAccount(int balance) {
this.balance = balance;
}
protected int getBalance() {
return balance;
}
}
让我们假设一个完整的类层次结构。好吧,粗略地说,其他账户子类型都是从 BankAccount 继承的。在 BankAccount 类的继承者中,必须使用 getBalance() 方法。一切都很好,让我们保护它。一切都会好起来的,但是假设我不希望任何人能够看到除了所有者之外的帐户余额。但不幸的是,对我来说,protected 可以访问同名包中的所有类、继承者和类。那些。我可以简单地创建自己的类,将其放入 java.com.test 包中并访问此方法,并相应地访问余额。如何治疗?
首先,您成为了一个常见误解的受害者——认为封装与隐藏密不可分。其次,隐藏一般和特别是访问修饰符并不是为了防止恶意黑客通过继承破坏您的代码。需要访问修饰符来防止无意中误用对象。在大型系统中,很难跟踪数百个对象中的一个对象,在数千个可能的程序状态之一中,不违反另一个对象的不变量。