Java: 内部访问级别 类

Java: Access level of Inner classes

我正要在另一个 class

中创建一个 class
public class Sq {
        class Inner {
            private int a; //no getters setters
                           //a is private
            private Inner (int a1) {
                this.a = a1;
            }
        }
    public static void main(String[] args) {
        Sq outter = new Sq();
        Inner d = outter.new Inner(3);
        System.out.println("Private a = " + d.a);
    }
}

有效.. 这样我就可以访问 inner 的 private 字段,我还添加了 Inner2 class 并尝试更改 "a"来自 Inner2,它也有效:/

所以看起来 private 在内部 class 不是那么私密 , 看起来 是public内整class.

嵌套 classes 是 public 用于外部 class 和 private 用于所有其他 classes...

一些参考:Nested Classes

声明 private nested/inner class 不会改变外部 class 本身的可见性,只是认为嵌套的 class(私有或非私有) ) 作为外部 class.

的 variable/method
public class Sq {
    public int publicNumber = 0;
    private int number = 0;
    private class Inner { ... }
}

编辑

从内部 class 你也可以调用外部 class 的一些 variable/method 否则没有问题

public class Sq {

    private int number = 0;

    class Inner {
        private int a;

        private Inner(int a1) {
            this.a = a1;
            number++;
        }

        private String getOuterClassString()
        {
            return getOuterString();
        }

        private String getPrivateString()
        {
            return "privateString";
        }

        public String getPublicString()
        {
            return "publicString";
        }
    }

    private String getOuterString()
    {
        return "outerString";
    }

    public static void main(String[] args) {
        Sq outter = new Sq();
        Inner d = outter.new Inner(3);
        System.out.println("Number = " + outter.number);
        System.out.println("Private a = " + d.a);
        System.out.println("Number = " + outter.number);

        System.out.println(d.getPrivateString());
        System.out.println(d.getPublicString());
        System.out.println(d.getOuterClassString());
    }
}

内部 classes 最终是为了在组织方面为外部 class 提供一些效用。内部 class 完全可以被外部 class 访问,因为最终您真的不需要 隐藏 来自您自己 class 的数据。当代码的复杂性要求您将数据隐藏在 getter 和 setter 后面时,您应该认真考虑将 class 放入其自己的文件中的可能性。