我正在为OCP 8处理一些练习问题。
一个问题提出了一个带有私有字段和私有获取方法的类。正确的答案是该代码违反了封装,因为getter方法应该是公开的。
public class A {
private String a;
private String getA() { return a; }
}
但是,另一个问题是一个带有私有字段且根本没有getter方法的类。正确的答案是该代码遵循封装原则。
public class A {
private String a;
}
假设所有数据字段都是私有的,那么封装最多的顺序不应该至少不是无吸气剂方法,专用吸气剂方法和公共吸气剂方法吗?
我知道我的问题听起来可能基于意见,但考试不是。
专用的吸气剂方法不会违反封装。那只是胡说八道。
我在这里不发表意见。事实是,只能在声明它的类中调用Java私有方法。那就是封装的边界之内。
或者您误解了OCP示例问题或答案,或者他们犯了一个错误。
现在可能他们要问的是示例类是good封装的示例,还是更普遍的良好OO设计的示例。
另一个答案似乎是在争论私人获取者是无用的。我不同意。尤其是因为获取程序可能会做其他事情,而不仅仅是返回值。考虑一下:
private synchronized void setBalance(int newBalance) {
this.balance = newBalance;
}
private synchronized int getBalance() {
return this.balance;
}
这可确保调用方将看到余额字段的当前值,即使该值刚刚被另一个线程更新。当然,我们可以通过其他方式做到这一点,但是这种方式很好[。
还有私人获取者可以合法地做的其他事情。