这是我的作业问题:
以下哪类没有被严格封装?
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/