下面是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
}
}
我无法理解// ???你能否解释为什么属性可见?
答案 0 :(得分:0)
这将解释Access 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
是可见的,因为受保护的成员可以通过子类访问。
阅读我提供的链接。它在第一个表中解释了这一点。
答案 1 :(得分:0)
也许现在是阅读一些基本文档的时候了?
private int a
- 仅在此课程中可见
protected int a
- 在此课程和所有扩展此课程的子课程中都可见
int a
- 与此类
public int a
- 可从任何其他课程中看到