有人可以告诉我一个使用public作为访问修饰符会“错误”的情况,然后对每个修饰符做同样的事情吗?

时间:2011-08-26 09:48:44

标签: java access-modifiers

我一直在努力学习更多关于java中访问修饰符的知识,并且每个人都说“使用私有来隐藏你不想要其他类/方法使用的东西”,我只是想知道为什么需要完成。我想不出一个单独的案例,私人用作唯一的开发者是有意义的......

该问题延伸到也没有提到访问说明符。它似乎只是限制了信息流,因为用户无法看到我们正在生成的代码......

任何有关更好地理解这一点的帮助都将非常受欢迎,因为我倾向于从编程中学习更好。万分感谢!

7 个答案:

答案 0 :(得分:3)

  

我想不出一个单独的案例,私人用作唯一的开发人员......

即使作为唯一的开发人员,您也可能会犯错误,请考虑您在编写后几个月内触摸/使用的代码。 使用正确的访问修饰符有助于封装,构造代码和避免错误(比如意外地改变某些类的内部状态)。

  

该问题延伸到也没有提到访问说明符。它似乎只是限制了信息流,因为用户无法看到我们正在生成的代码......

我不能完全跟随你,但你总是提到一个访问修饰符,而不是写一个只是默认(包私有)访问。另请注意,代码的用户(如果是库等)将会看到所有成员及其访问修饰符,如果不限制对这些字段的访问,他们可能会尝试访问一些不应直接修改的字段。

答案 1 :(得分:2)

我认为找到示例的一个好方法是转到JDK,找到src.zip文件,然后开始浏览源代码。我相信你会找到很好的引用。它可能比你在这里发布的任何内容都更有意义,而且你会知道它正在世界各地的生产中运行。

这也适用于良好的开源项目(例如Spring)。

阅读其他人的优秀代码是了解设计理念的好方法。

答案 2 :(得分:2)

为什么要隐藏内容的一个简单示例:

class CreditCard {
    private int number;

    public Boolean setNumber(int nr) {
        if(!checkNumber(nr))
            return false;

        number = nr;
        return true;
    }

    private Boolean checkNumber(int nr) {
        ...
    }
}

答案 3 :(得分:1)

您可以使用私有数据成员,以确保只有您的类也可以访问并且能够修改。您必须想象您的课程被许多其他课程使用。如果数据成员是公共的,那么这些其他类中的任何一个都可以修改它,并且您的类应该期望这样。如果该数据成员的此行为是意外的(不应由任何其他代码更改),请将其设为私有。

例如,假设您的类中有一个数据成员'count',只能在您的类中更新,将其声明为私有,否则会发生这样的事情:

class A
{
    public int count;
    public A()
    {
        count = 1;
    }
    public int divideByCount(int value)
    {
        return value/count;
    }
    public incrementCount()
    {
        count = count + 1;
    }
}

// somewhere else
example = new A();
example.count = 0;
example.divideByCount(4);   // Divide by zero!

答案 4 :(得分:1)

考虑控制状态的变量。

假设我们有一个班级的州:

bool isDead = false;
bool isAlive = true;
bool canWalk = true;

void Kill() { isDead = true; isAlive = false; canWalk = false; }
void Resurrect() { isDead = false; isAlive = true; canWalk = true; }

现在状态紧密相连,你不希望能够在没有其他状态的情况下改变状态 如果你既死又活,那就没有任何意义。

因此,您希望将变量设为私有,因此您无权更改它们。相反,您将使用改变状态的函数。

答案 5 :(得分:0)

如果您不希望您的成员(例如属性或方法)只能访问当前类,则必须使用private修饰符。

使用private修饰符的选择是程序员的任务。

如果程序员不希望其他类无法访问类的成员,因为它可以更改对象的状态(并且程序员不希望对象意外地更改其状态),那么他使用private

有关访问修饰符的其他信息,请参阅此page。检查thisthis

答案 6 :(得分:0)

即使是唯一的开发人员也会使用IDE和编译器等工具来帮助他们开发。

当您将字段标记为私有时,您说您不希望该字段在其他任何地方使用。随着时间的推移,你可以回到你的代码,你忘了你第一次写它时可能做出的任何假设。如果它是公开的,但你没有这样开发,你可以错误地使用它。将其标记为私有可确保编译器将帮助您稍后做出正确的选择。

当您将某个字段或方法标记为私有且未在任何地方使用时,IDE会立即通知您。如果你公开它,它无法帮助你,你可能会得到许多未使用的代码。这可能是一个问题,如果a)你希望它被使用但它不是,b)当你改变其中一个依赖项时你维护它,但是因为它从未使用过,这是浪费的努力。