直到今天我才意识到这一点,但在 Java 中,私有字段在内部类上并不是真正私有的。您可以实例化一个类并访问这些字段,就好像它们是公共的一样。我的问题是为什么这是用 Java 完成的?哪些设计决策导致了封装的破坏?允许这样做有什么好处吗?
public class test {
public static void main(String[] args) {
Inner inner = new Inner();
inner.data = "TEST";
System.out.println(inner.data);
Inner1 inner1 = new Inner1();
inner1.data = "TEST";
System.out.println(inner1.data);
new test();
}
public test() {
Inner2 inner2 = new Inner2();
inner2.data = "TEST";
System.out.println(inner2.data);
Inner3 inner3 = new Inner3();
inner3.data = "TEST";
System.out.println(inner3.data);
}
private final class Inner3 {
private String data;
public String getData() {
System.out.println("Inner3.getData()");
return data;
}
public void setData(String data) {
System.out.println("Inner3.setData(String)");
this.data = data;
}
}
private class Inner2 {
private String data;
public String getData() {
System.out.println("Inner2.getData()");
return data;
}
public void setData(String data) {
System.out.println("Inner2.setData(String)");
this.data = data;
}
}
private static class Inner1 {
private String data;
public String getData() {
System.out.println("Inner1.getData()");
return data;
}
public void setData(String data) {
System.out.println("Inner1.setData(String)");
this.data = data;
}
}
private static final class Inner {
private String data;
public String getData() {
System.out.println("Inner.getData()");
return data;
}
public void setData(String data) {
System.out.println("Inner.setData(String)");
this.data = data;
}
}
}
它有助于匿名类。他们可以访问周围的类(就像方法中的最终变量一样)。这样就避免了很多 setter/getter,否则您必须至少将包设为私有,从而与私有类之外的其他类共享。
如果您不喜欢这种行为(大多数时候就像我一样),只需使用静态私有类,然后这些类只能访问私有静态成员,这让我有更好的直觉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)