5

这是我的作业问题:以下哪些类不是紧密封装的?

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 类没有紧密封装;因为方法是私有的。关于 A 类,我觉得它不仅仅是封装的。因为封装的基本定义说“你必须隐藏你的成员并向类用户提供你想要的行为方式”。现在类 A 没有访问器修改器方法。所以 A 不应该被认为是封装的。我不确定,但是。如果我错了,请纠正我。

4

14 回答 14

4

您的课程中如何定义“紧密封装”?据我从谷歌搜索中得知,没有学术界或行业范围内的定义。

我可以争辩说每个类都封装得很好,或者每个类都封装得不好。为什么客户端暴露了私有变量 X 的名称?似乎很不幸。为什么 A 类不公开任何功能?C 只在应该使用它的域中公开一个 getter 是否“正确”?

这个问题只是歪曲了封装的概念。您不能通过“封装验证程序”例程运行代码。这是一个人类设计的决定,你说应该暴露的和不应该暴露的。从根本上说,这通常要求数据是私有的,但是一个方法应该是公共的还是私有的完全取决于它的实际含义和正在做什么。

于 2012-07-25T15:40:39.830 回答
2

你完全正确。A 类和 C 类都没有紧密封装,因为紧密封装意味着私有字段与公共 getter 和 setter 配对。

于 2012-07-25T15:33:47.600 回答
1

您对封装的定义是正确的。但我认为你有点偏离了方向。

封装意味着您不允许其他人直接访问您的内部。您公开用户功能并管理自己的内部结构。

因此,如果我是银行账户 - 我有一个名为 total 的私有字段。我不让用户直接设置我的总数。相反,我公开了withdraw(double amt) 和deposit(double amt),并根据需要管理total。

不要挂断 A 只有一个私人成员。考虑这些类片段 - 例如未显示用户功能并尝试再次回答。

于 2012-07-25T15:36:33.283 回答
1

当且仅当该类的所有数据成员(变量)都声明为私有时,才称该类是紧密封装的。

如果类具有声明为私有的所有变量,并且如果它被其他也具有所有私有数据成员的类继承,那么后一个也被称为紧密封装的类。

于 2018-04-02T10:09:13.990 回答
0

这里B类将被紧密封装,因为根据定义“如果使用私有变量和公共属性声明一个类,则称为紧密封装”

于 2014-06-02T07:13:50.443 回答
0

我认为在封装的定义中提到了公共访问器的必要性,因为它很有意义,没有其他原因。所以我会说紧密封装的类是一个隐藏其成员的类,防止其他类的对象直接访问它们。就这些。我会选择None,因为所有这些类都是封装的,即使其中两个没有多大意义。

于 2012-07-25T16:23:47.150 回答
0

“紧密封装”类只遵循一个规则,所有成员(变量)在一个类中都是“私有的”,你可以说是“紧密封装”类。因为“紧密封装”的概念不依赖于 [getter,setter 及其访问修饰符]。

换句话说

类的所有成员都应该是私有的,就是这样。

于 2019-11-28T11:40:58.153 回答
0

您上面的所有类都被紧密封装。

当且仅当所有数据成员都声明为私有时,才称一个类是紧密封装的。在这里,我们不应该担心是否存在公共访问器或修改器。

于 2016-09-11T19:03:44.957 回答
0

您描述的所有三个类都是紧密封装的。

如果一个类只有私有变量而没有其他公共变量,则称一个类是紧密封装的类。

它不依赖于 getter 或 setter 方法。

我们需要有 getter 和 Setter,因为我们需要创建变量,以便我们可以在其他类或函数中使用它们。

因此,无论公共 getter 和 setter 方法如何,这三个类都被紧密封装。

于 2017-07-27T10:52:36.257 回答
0

这里的所有类都被紧密封装,因为每个变量都声明为私有,我们不需要检查相应的getter和setter方法是否声明为public。

于 2018-10-08T04:10:10.863 回答
0

紧密封装的类意味着所有成员变量都声明为私有,因此所有类都被紧密封装注意如果父类包含一个定义为非私有的成员变量,您的子类将不会被紧密封装

于 2018-02-08T20:24:52.260 回答
-1

当且仅当每个变量都声明为私有时,才称一个类是“紧密封装的”。(无论它们是否包含gettersetter方法。

在您的示例中,所有三个类都被紧密封装,因为每个类都将每个变量都设为私有。

于 2017-03-19T00:22:40.950 回答
-2

所有这些类都是紧密封装的类。在紧密封装的类中,所有实例变量都应该是私有的。它不关心方法是否有任何访问修饰符(默认、私有、受保护和公共)。

于 2018-03-20T05:43:50.900 回答
-2

默认情况下,每个 Java 类都只封装类,当我们说它是紧密封装的,当且仅当该类中存在的每个变量都是私有的,这种类型的类称为紧密封装类。

对于你的问题 Ans: 那里没有课。

注意:所有类都紧密封装。

于 2020-03-08T07:06:56.373 回答