当前位置: 首页 > 面试题库 >

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

狄奕
2023-03-14
问题内容

最近,在使用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.
    }
}

问题答案:

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

例如,如果你有一个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;
    }
}


 类似资料:
  • 问题内容: 我知道这不仅适用于Java,而且适用于许多语言,但这是我最熟悉的语言。 我了解修饰符的作用以及如何使用它们。我只想知道,为什么我们需要它们?为什么每个对象都无法访问,无论是否需要访问? 问题答案: 当您必须维护更大的项目时,原因变得更加明显。当方法或变量是公共的时,对它进行更改时必须小心,因为您永远不知道代码库的哪些部分依赖于它的确切行为。 但是,当变量或方法是私有的时,您会知道该变量

  • 我想如果一个类被声明为public,它可以从任何地方访问。但是为什么eclipse称之为错误呢?

  • C++ 类 & 对象 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。 一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前

  • 问题内容: 如果我没有明确声明,方法或实例变量的默认访问修饰符是什么? 例如: 此构造函数的访问修饰符是受保护的还是打包的?同一包(即)中的其他类可以调用此构造函数吗? 问题答案: 如果一个类没有修饰符(默认值,也称为),则它仅在其自己的包中可见(包被命名为相关类的组,你将在以后的课程中对其进行了解。) 在,你也可以像顶级类一样使用修饰符或(),并且含义相同。

  • 问题内容: 在Java中, 访问说明符 和 访问修饰符 是一回事吗? 问题答案: “访问修饰符”是Java语言规范中的正式术语,并在Java语言规范中使用。“访问说明符”在Java API文档中 同义使用,但这是我第一次注意到这一点。最好坚持使用JLS术语。

  • 问题内容: 抽象类只能用作由其他类扩展的基类,对吗?抽象类的构造函数可以具有常用的访问修饰符(公共,保护和私有(供内部使用))。其中和是使用正确的访问修饰符,因为抽象类型似乎表明技术上的公共构造将起到非常保护?我应该在所有构造函数上使用protected吗? 问题答案: 因为抽象类型似乎表明从技术上讲,公共构造函数将在很大程度上受到保护 这是不正确的。抽象类不能通过调用其构造函数直接实例化,但是,