为什么私有的getter方法违反了封装,但是缺少getter方法却没有?

问题描述 投票:0回答:2

我正在为OCP 8处理一些练习问题。

一个问题提出了一个带有私有字段和私有获取方法的类。正确的答案是该代码违反了封装,因为getter方法应该是公开的。

public class A {
    private String a;
    private String getA() { return a; }
}

但是,另一个问题是一个带有私有字段且根本没有getter方法的类。正确的答案是该代码遵循封装原则。

public class A {
    private String a;
}

假设所有数据字段都是私有的,那么封装最多的顺序不应该至少不是无吸气剂方法,专用吸气剂方法和公共吸气剂方法吗?

我知道我的问题听起来可能基于意见,但考试不是。

java encapsulation getter
2个回答
2
投票

专用的吸气剂方法不会违反封装。那只是胡说八道。

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

或者您误解了OCP示例问题或答案,或者他们犯了一个错误。


现在可能他们要问的是示例类是good封装的示例,还是更普遍的良好OO设计的示例。


另一个答案似乎是在争论私人获取者是无用的。我不同意。尤其是因为获取程序可能会做其他事情,而不仅仅是返回值。考虑一下:

private synchronized void setBalance(int newBalance) {
    this.balance = newBalance;
}

private synchronized int getBalance() {
    return this.balance;
}

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

还有私人获取者可以合法地做的其他事情。

0
投票
因为,如果将获取方法设为私有,则无法访问另一个类中的该数据成员。我们使用吸气剂访问另一个类中的私有数据成员。因此,如果您将getter设为私有,那么该getter的用途是什么。
© www.soinside.com 2019 - 2024. All rights reserved.