一尘不染

为什么要使用类级访问修饰符而不是对象级?

java

最近,在使用C#时,我意识到我可以FooFoo的静态函数甚至其他Foo对象调用对象的私有函数。在我了解了访问修饰符的所有内容之后,这对我来说听起来很奇怪。

据我所知,当函数执行某种内部过程的一部分时,会将其私有。只有对象本身知道何时使用那些功能,因为其他对象不应该/不能控制对象的流程。是否有任何理由为什么应该从这个非常简单的规则中排除同一类的其他对象?

根据要求,举一个例子:

public class AClass {
    private void doSomething() { /* Do something here */ }
    public void aFunction() {
        AClass f = new AClass();
        f.doSomething(); // I would have expected this line to cause an access error.
    }
}

阅读 314

收藏
2020-03-21

共1个答案

一尘不染

当你将成员设为私有时,它对其他类(而不是类本身)是私有的。

例如,如果你有一个Equals方法需要访问另一个实例的私有成员,则此方法很有用:

public class AClass
{
    private int privateMemberA;

    // This version of Equals has been simplified
    // for the purpose of exemplifying my point, it shouldn't be copied as is
    public override bool Equals(object obj)
    {
        var otherInstance = obj as AClass;
        if (otherInstance == null)
        {
            return null;
        }

        return otherInstance.privateMemberA == this.privateMemberA;
    }
}
2020-03-21