1

“公共”或“受保护”方法对于不实现任何接口的私有嵌套类没有任何区别..?

如果私有嵌套类没有实现任何接口或从任何类继承,对于其方法的修饰符,似乎“public”或“protected”或没有修饰符没有任何区别。如果编译器只允许它们“私有”,那将更有意义。那么为什么java允许它们呢?

class Enclosing {

    private class Inner {
        private void f1() {}
        void f2() {}
        protected void f3() {}
        public void f4() {}
    }

    void test() {
        Inner o= new Inner();
        o.f1();
        o.f2();
        o.f3();
        o.f4();
    }
}
4

2 回答 2

2

这是我刚刚尝试过的:

public class Test {

    public void method(){

        Innerclass ic = new Innerclass();
        InnerClass2 ic2 = new InnerClass2();
        System.out.println(ic.i);
        System.out.println(ic.j);
        System.out.println(ic.k);
        System.out.println(ic.l);

        System.out.println(ic2.i);  // Compile Error
        System.out.println(ic2.j);
        System.out.println(ic2.k);
        System.out.println(ic2.l);
    }

    private class Innerclass{

        private int i;
        public int j;
        protected int k;
        int l;

    };

    private class InnerClass2 extends Innerclass{

    }

}

如上所述,这有一个错误。

  1. 即使内部类是私有的,内部类的所有成员都可以被封闭/外部类访问,而不管它们的可见性/访问修饰符如何。
  2. 但是,如果一个内部类正在扩展另一个内部类,则访问修饰符确实很重要。
  3. 这些是适用于任何与继承相关的类的一般继承规则。
  4. 因此,java 允许私有内部类中的所有访问修饰符。
于 2012-05-11T06:27:15.097 回答
0

private意味着只能通过类范围访问。这条规则突然不适用于嵌套类是不合逻辑的。

我没有定义任何其他类型的嵌套类,除了private. 以及我希望从我让他们成为的父类访问他们的成员public

于 2012-05-11T06:05:30.240 回答