Java 私有内部类字段的访问修饰符有什么意义吗?

Java 私有内部类字段的访问修饰符有什么意义吗?,java,Java,假设我有一个外部类和一个内部类。内部类有四个字段,其中包含所有可能的访问修饰符 class Outer { private class Inner { public int publicField; protected int protectedField; int packagePrivatefield; private int privateField; } void doSomethingWithFi

假设我有一个外部类和一个内部类。内部类有四个字段,其中包含所有可能的访问修饰符

class Outer {
    private class Inner {
        public int publicField;
        protected int protectedField;
        int packagePrivatefield;
        private int privateField;
    }

    void doSomethingWithFields() {
        Inner inner = new Inner();
        inner.publicField = 111;
        inner.protectedField = 111;
        inner.packagePrivatefield = 111;
        inner.privateField = 111;
    }
}
内部类是私有的,所以我不能在外部类之外创建它的实例。在外部类中,如果我创建内部类的一个实例并尝试更改每个字段的值,我将成功地做到这一点。因此,我发现上面字段的访问修饰符没有意义。有吗

编辑:主要问题是:
我应该为私有内部类的成员选择哪些访问修饰符?内部类不仅可以实现接口。我可以把一些复杂的结构和逻辑放进去。

对,如果内部类是私有的,它就没有意义了


但是请记住,内部类通常不是很漂亮,您应该用包将多个类分组。

是的。你说得对。但只有当您有一个嵌套的内部类时,在私有内部类中使用各种访问修饰符才没有区别。课堂外什么也看不见。 但是如果您有另一个嵌套的内部类,那么您的访问修饰符将很重要。 e、 g


在这种情况下,类B的字段和方法访问修饰符将很重要

访问修饰符在继承中有发言权。另一个扩展您提到的类的内部私有类没有外部类的特权

public class Main {
    private class Test {
        protected int hello;
    }
    private class TestNext extends Test {
        private TestNext() {
            this.hello = 1;
        }
    }
}

将编译,但如果hello是私有的,则不会编译。

如果内部类未实现任何接口或继承,则没有必要指定访问修饰符

class Outer {
    private class Inner {
        public int publicField;
        protected int protectedField;
        int packagePrivatefield;
        private int privateField;
    }

    void doSomethingWithFields() {
        Inner inner = new Inner();
        inner.publicField = 111;
        inner.protectedField = 111;
        inner.packagePrivatefield = 111;
        inner.privateField = 111;
    }
}

如果内部类继承了某些内容,那么它在该上下文中是有意义的。

我倾向于使用相同的修饰符,就好像我的类不是私有内部类一样。这至少说明了不应从外部调用此方法,而打算从外部调用此方法。在将类重构为顶级类时,它也会有所帮助。很抱歉,assylias的duplicate是无效的:这个问题是关于字段的,而标记为duplicate的问题是关于方法的,它们的推理完全不同。我想在这里补充一点,使用修饰符(并使用getter和setter而不是字段)如果您重构代码以拉出类,则会更安全。@JohnB肯定,但考虑到这个问题,我看不出有任何理由提及这一点。我没有评论他的类名或任何类似的名称。只举一个例子,说明私有内部类中的访问修饰符很重要。内部类非常方便,因为它们可以作为侦听器并具有acc外挂舱。