紧密封装的类

时间:2012-07-25 15:27:29

标签: java

这是我的作业问题: 以下哪个类中没有紧密封装?

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类没有accessor-mutator方法。所以A不应该被认为是封装的。我不确定。如果我错了,请纠正我。

14 个答案:

答案 0 :(得分:4)

你班级中如何定义“紧密封装”?据我所知,谷歌搜索没有学术界或行业界的定义。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

因此,如果我是银行账户 - 我有一个名为total的私人字段。我不会让用户直接设置我的总数。相反,我暴露撤回(双重amt)和存款(双重amt),我根据需要管理总数。

不要挂在A只有私人会员。考虑这些类片段 - 就像没有显示用户功能一样,并尝试再次回答。

答案 3 :(得分:1)

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

如果class将所有变量声明为private,并且由其他类继承了所有私有数据成员,那么后者也被称为紧密封装类。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这里B类将被严格封装,因为根据定义"如果一个类被声明为私有变量&公共财产,据说是紧密封装 "

答案 6 :(得分:0)

以上所有类都是紧密封装的。

当且仅当所有数据成员声明为私有时,才会认为该类是紧密封装的。在这里,我们不应该担心公共访问者或变异者是否存在。

答案 7 :(得分:0)

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

如果一个类只有私有变量而没有其他公共变量,那么一个类被认为是紧密封装的类。

它不依赖于getter或setter方法。

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

换句话说

课程的所有成员应该是私有

答案 11 :(得分:-1)

据说一个班级紧密封装了#34;当且仅当每个变量都被声明为私有时(不管它们是否包含 getter setter 方法。

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

答案 12 :(得分:-1)

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

答案 13 :(得分:-2)

默认情况下,每个Java类都是仅封装类,当我们说仅当该类中存在的每个变量都是私有的时,才将其紧密封装。此类类型的类称为紧密封装类。

关于您的问题Ans:那里没有课。

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