在块中定义的内部类(如Java中的方法)不能包含任何修改器,甚至不能公开.为什么?

Bha*_*esh 0 java

在Java中,类永远不能被限定为私有或受保护.它可以随时公开.很明显,毫无疑问.


但是,Java中的内部类可以使用private,protected或public中的任何修饰符指定.内部类也可以在单个块中定义,就像方法一样.在这种情况下,不能使用私有,公共或受保护的任何修饰符指定内部类.


编译以下简单程序没有错误,工作得很好.

package amazingjava;
final class Demo
{
    public class Really
    {
        public class Quite
        {
            public class Surprising
            {
                @Override
                public String toString()
                {
                    return( "it really works !" );
                }
            }
        }
    }
}

final public class Main
{
    public static void main(String[] args)
    {
        System.out.println( "It may be hard to believe, but " + new Demo().new   
        Really().new Quite().new Surprising().toString());

        class Really
        {
            class Quite
            {
                class Surprising
                {
                    @Override
                    public String toString()
                    {
                        return( "it really works !" );
                    }
                }
            }
        }
        System.out.println( "It may be hard to believe, but " + new Really().new 
       Quite().new Surprising().toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

它产生以下输出.

可能很难相信,但它确实有效!

可能很难相信,但它确实有效!


现在,我的问题只是在上面的例子中main()方法中声明的内部类不能有任何修饰符.尝试使用任何修饰符private,protected或甚至public修改这些类会产生编译时错误!为什么?在这种情况下,编译器使用哪个默认修饰符?

Mec*_*kov 7

在方法内定义的内部类被视为在该方法中声明的任何变量 - 这些变量是LOCAL.除了FINAL之外,局部变量或类不能具有任何修饰符.

在另一个类中定义的内部类被视为实例变量,因此实例类或变量可以是公共私有的或没有标识符.