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 放入其自己的文件中的可能性。
我正要在另一个 class
中创建一个 classpublic 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.
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 放入其自己的文件中的可能性。