K M*_*Man 0 java getter encapsulation
我正在为OCP 8处理一些练习问题。
一个问题涉及一类具有私有字段和私有获取方法的类。正确的答案是该代码违反了封装,因为getter方法应该是公共的。
public class A {
private String a;
private String getA() { return a; }
}
Run Code Online (Sandbox Code Playgroud)
但是,另一个问题是具有私有字段且根本没有getter方法的类。正确的答案是该代码遵循封装原则。
public class A {
private String a;
}
Run Code Online (Sandbox Code Playgroud)
假设所有数据字段都是私有的,那么大多数封装的顺序不应该至少是无获取方法,私有获取方法和公共获取方法吗?
我知道我的问题听起来可能是基于意见的,但考试却不是。
专用的getter方法不违反封装。那只是胡说八道。
我在这里没有发表意见。事实是,只能在声明它的类中调用Java私有方法。那就是封装的边界之内。
您可能是看错了OCP示例问题和答案,或者他们犯了一个错误。
现在可能是他们要问的是示例类是好的封装示例还是更一般的OO设计示例。
更新
看示例代码,很难说出一种方法。做出判断是不现实的。(该代码实际上是无用的,但是除非我们知道其预期用途,否则我们不能真正称其为不良设计。)
另一个答案似乎是在争论私人获取者是无用的。我不同意。尤其是因为获取程序可能会做其他事情,而不仅仅是返回值。考虑一下:
private synchronized void setBalance(int newBalance) {
this.balance = newBalance;
}
private synchronized int getBalance() {
return this.balance;
}
Run Code Online (Sandbox Code Playgroud)
这样可以确保调用方将看到balance字段的当前值,即使该值刚刚被另一个线程更新。当然,我们可以通过其他方式做到这一点,但是这种方式可以很好地划分职责。
还有一个私人获取者可以合法地做的事情。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |