这是我的作业问题:
以下哪类没有被严格封装?

class A
{
    private int x;
}
class B
{
    private int x;
    public void setX(int x)
    {
        this.x=x;
    }
    public int getX()
    {
        return x;
    }
}
class C
{
    private int x;
    private void setX(int x)
    {
        this.x=x;
    }
    private int getX()
    {
        return x;
    }
}

我花了一些时间在coderanch上搜索,但无法获得所需的内容。谁能帮帮我吗?

我认为C类不是紧密封装的;因为方法是私有(private)的。关于A类,我的感觉是它不仅是封装的。因为封装的基本定义是:“您必须隐藏成员并向类用户提供所需行为的方法。”现在,类A没有accessor-mutator方法。因此,不应将A视为已封装。我不确定。如果我错了,请纠正我。

最佳答案

在您的类(class)中如何定义“紧密封装”?据我从Google搜索中得知,目前还没有学术界或整个行业的定义。

我可以说每个类的封装都很好,或者每个类的封装都不好。为什么客户端使用私有(private)变量X的名称?似乎很不幸。为什么A类没有公开任何功能? C仅在应该使用它的域中公开一个 setter/getter ,这是“正确”的吗?

这个问题只是歪曲了封装的概念。您无法通过“封装验证程序”例程运行代码。这是一个人为的设计决策,在该决策中,您说应该公开的东西应该公开,而不应该公开的东西不应该公开。从根本上讲,这通常要求数据是私有(private)的,但是方法是公开的还是私有(private)的,则完全取决于其实际含义和作用。

关于java - 紧密封装的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11653229/

10-11 21:37