假设我有一个带有内部类的外部类。内部类有四个字段,包含所有可能的访问修饰符。
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;
}
}
内部类是私有的,所以我无法在外部类之外创建它的实例。在Outer类中,如果我创建内部类的实例并尝试更改每个字段的值,我将成功地执行此操作。所以我看到上述字段的访问修饰符没有任何意义。有吗?
编辑:主要问题是: 我应该为私有内部类的成员选择哪些访问修饰符?内部类不仅可以实现接口。我可以把一些带有逻辑的困难结构放进去。
答案 0 :(得分:7)
访问修饰符在继承方面有发言权。另一个扩展你所讨论的类的内部私有类没有外部类的特权。
public class Main {
private class Test {
protected int hello;
}
private class TestNext extends Test {
private TestNext() {
this.hello = 1;
}
}
}
将编译,但如果hello
是私有的,则不会。
答案 1 :(得分:0)
是的,如果内部类是私有的,那就没有意义了。
但请记住,内部类通常不是很漂亮,你应该用包来组合多个类。
答案 2 :(得分:0)
是。你是对的。但是只有你有单一的嵌套内部在私有内部类中拥有各种访问修饰符之间没有区别。课堂上没有任何东西可以看出来。 但是如果你有另一个嵌套的内部类,那么你的访问修饰符就很重要了。 e.g。
class A{
private class B{
class C{}
}
}
在这种情况下,B类的字段和方法访问修饰符将很重要
答案 3 :(得分:0)
如果内部类没有实现任何接口或继承,那么就没有必要指定访问修饰符。
如果内部类继承了某些内容,那么在该上下文中它确实有意义。