已知A类被打包在packageA,B类被打包在packageB,且B类被声明为public,且有一个成员变量x被声明为protected控制方式。C类也位于packageA包,且继承了B类。则以下说法正确的是() C
A、A类的实例不能访问到B类的实例
B、A类的实例能够访问到B类一个实例的x成员
C、C类的实例可以访问到B类一个实例的x成员
D、C类的实例不能访问到B类的实例
定义两个包
包2中有public修饰的类B。其有protected的成员。
package packgeDemo2;
public class B {
protected String x = "B类的protected成员";
public void show() {
System.out.println("正在访问B类实例");
}
}
包1中有类A,以及继承自类B的类C。
package packgeDemo1;
import packgeDemo2.B;
class A {
B b = new B();
//String xx = x;
//String xx = b.x;//A类的实例不能访问到B类的一个实例的x成员
}
class C extends packgeDemo2.B {
B b = new B();
String xx = super.x;
String xxx = x;
}
public class packgeDemo1 {
public static void main(String[] args) {
A a = new A();
C c = new C();
a.b.show();//A类的实例可以访问到B类的实例 只需要导入B类所在的包(B类是public
c.b.show();//C类的实例可以访问到B类的实例 只需要导入B类所在的包(B类是public
//a.b.x //A类的实例不能访问B类的一个实例的x成员 原因是这个x是protected的
//C类的实例可以!访问到B类的一个实例的x成员(通过super或者不用super(因为protected子类可以访问到
System.out.println(c.xx);
System.out.println(c.xxx);
}
}
有以下结果。
即
A类的实例可以访问到B类的实例 只需要导入B类所在的包(B类是public
C类的实例可以访问到B类的实例 只需要导入B类所在的包(B类是public
A类的实例不能访问B类的一个实例的x成员 原因是这个x是protected的
C类的实例可以!访问到B类的一个实例的x成员(通过super或者不用super(因为protected子类可以访问到