[英]java access modifier- visibility of attributes whose type is other class. why it is visible or not?
下面是一些 Java 访问修饰符的嵌套示例。 当类具有类型为其他类的属性时,我无法清楚地找出答案。
package packageX;
import packageY.*;
public class A {
public int x;
private int y;
protected int z;
public A objA;
public C objC;
void test(){
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(objA.x);
System.out.println(objA.y);
System.out.println(objA.z);
System.out.println(objC.x);
System.out.println(objC.y);//not visible
System.out.println(objC.z);//?? why visible?
}
}
class B{
public A objA;
public C objC;
void test(){
System.out.println(x);//not visible
System.out.println(y);//not visible
System.out.println(z);//not visible
System.out.println(objA.x);
System.out.println(objA.y);//not visible
System.out.println(objA.z);
System.out.println(objC.x);
System.out.println(objC.y);//not visible
System.out.println(objC.z);//?? why visible?
}
}
package packageY;
import packageX.*;
public class C extends A{
public A objA;
public C objC;
void test(){
System.out.println(x);
System.out.println(y);//not visible
System.out.println(z);
System.out.println(objA.x);
System.out.println(objA.y);//not visible
System.out.println(objA.z);//not visible//??? why not visible?
System.out.println(objC.x);
System.out.println(objC.y);//not visible//??? why visible?
System.out.println(objC.z);
}
}
class D{
public A objA;
public C objC;
void test(){
System.out.println(x);//not visible
System.out.println(y);//not visible
System.out.println(z);//not visible
System.out.println(objA.x);
System.out.println(objA.y);//not visible
System.out.println(objA.z);//not visible
System.out.println(objC.x);
System.out.println(objC.y);//not visible
System.out.println(objC.z);//not visible//??? why not visible
}
}
我无法理解几行 //??? 你能解释为什么这些属性可见或不可见吗?
这将解释访问https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
y
在C
不可见,因为C
扩展了A
并且A
已将y
私有。 因此C
看不到y
。
z
受到保护,因此子类可以看到z
。
类 B 看不到任何这些变量,因为它没有从任何其他类继承,也没有定义这些变量。
在 B 类中objA.y
无法访问,因为 y 是私有的。 您不能从声明它的类外部访问私有变量。
objC.z
是可见的,因为受保护的成员可以objC.z
类访问。
阅读我提供的链接。 它在第一个表中解释了这一点。
也许是时候阅读一些基本文档了?
private int a
- 仅在此类中可见
protected int a
- 在这个类和所有扩展这个类的子类中可见
int a
- 从与此类相同的包中的所有类可见
public int a
- 从任何其他类可见
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.