为了账号安全,请及时绑定邮箱和手机立即绑定

为什么私有 getter 方法会违反封装性,而缺少 getter 方法则不会?

为什么私有 getter 方法会违反封装性,而缺少 getter 方法则不会?

吃鸡游戏 2023-11-10 16:18:00
我正在做 OCP 8 的一些练习题。有一个问题涉及一个具有私有字段和私有 getter 方法的类。正确的答案是这段代码违反了封装性,因为 getter 方法应该是公共的。public class A {    private String a;    private String getA() { return a; }}然而,另一个问题是一个具有私有字段且根本没有 getter 方法的类。正确的答案是这段代码遵循封装原则。public class A {    private String a;}假设所有数据字段都是私有的,那么封装最多到最少的顺序不应该是无getter方法、私有getter方法和公共getter方法吗?我知道我的问题听起来可能是基于意见的,但考试不是。
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

私有 getter 方法不违反封装性。那只是无稽之谈。


我在这里不发表意见。事实上,Java 私有方法只能在声明它的类中调用。那是在封装的边界内。


要么您误读了 OCP 示例问题和答案,要么他们犯了错误。


现在,他们可能想问的是示例类是否是良好封装的示例,或者更一般地说,是良好面向对象设计的示例。


更新


看到示例代码,很难说是这样还是那样。做出判断太不现实了。(该代码实际上毫无用处,但除非我们知道其预期用途是什么,否则我们不能真正称其为糟糕的设计。)


另一个答案似乎是认为私有吸气剂是无用的。我不同意。特别是因为 getter 除了简单地返回值之外还可以做其他事情。考虑一下:


private synchronized void setBalance(int newBalance) {

    this.balance = newBalance;

}


private synchronized int getBalance() {

    return this.balance;

}

这确保调用者将看到余额字段的当前值,即使它刚刚被另一个线程更新。当然我们可以通过其他方式做到这一点,但这种方式是很好的责任分离。


还有其他私人吸气剂可以合法做的事情。


查看完整回答
反对 回复 2023-11-10
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

因为,如果将 getter 设置为私有,则无法访问另一个类中的该数据成员。我们使用 getter 来访问另一个类中的私有数据成员。因此,如果您将 getter 设置为私有,那么该 getter 有什么用呢?



查看完整回答
反对 回复 2023-11-10
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信