为什么在方法中定义的类中访问修饰符

时间:2015-04-27 11:22:12

标签: java oop access-modifiers

在方法中定义的类的字段上使用访问修饰符有什么意义?

e.g:

class Outer
{
  public static void main (String[] args)
  {
    // class defined inside method
    class Test
    {
      // applies an access modifier
      public int field;
    }

    Test test = new Test();
  }
}

以下两条陈述是否正确:

  • 无论访问修饰符如何,仍然从此方法范围之外访问该字段的唯一方法是使用反射
  • 无论访问修饰符如何,该字段始终可以在方法范围内访问,即使该字段是私有的而无需任何反射。

让我印象深刻的是,虽然不可能为课程使用访问修饰符,但它完全适用于其成员。虽然他们中的任何一个似乎对我都没有意义。

1 个答案:

答案 0 :(得分:2)

  

无论访问修饰符如何,仍然是访问的唯一方法   来自该方法范围之外的字段,是使用反射。

正确。但是,如果您遇到此问题,那么该类实际上不应该是本地类。

  

无论访问修饰符如何,始终可以访问该字段   在方法范围内,即使字段是私有的,也没有   任何反思的需要。

本地课程的用例很少。访问修饰符实际上没有任何影响,因为您的类应该是创建它的方法的本地:

  

与成员类一样,本地类与包含相关联   实例,并且可以访问任何成员,包括私人成员   包含类。

http://docstore.mik.ua/orelly/java-ent/jnut/ch03_11.htm

修改:

编译器允许您指定一个然后不强制执行的修饰符,这似乎很奇怪。我可以想到为什么会出现这种情况的两个很好的理由:

  1. 无论班级范围如何,都有一种标准的班级格式。
  2. 它允许您显示您打算如何访问该成员,访问私有字段/方法可能是一个坏主意,即使它在语法上没有错误。