我们来试一下嘛~~~just do it
我的测试代码:
基类代码:包为com.fu
package com.fu;
public class Base {
protected int protectedInt; //protected成员
public int publicInt; //public 成员
protected int getProtectedInt(){
return protectedInt;
}
protected static int staticProtectInt;
private int privateInt;
public static void main(String[] args) {
Base b=new Base();
b.privateInt=5;
}
}
不同包内派生类:com.zi
package com.zi;
import com.fu.Base;
public class TestOtherPackageSubClass extends Base {
public void test() {
Base b = new Base(); // 使用基类
b.publicInt = 0; // 可以访问
//b.protectedInt=3; // 访问protected的属性失败
//b.getProtectedInt(); // 访问protected的方法失败
Base.staticProtectInt=9;
}
public void test2() {
//privateInt =6; //访问父类的私有-出错
publicInt = 0; // 可以访问
protectedInt = 2; // 直接用父类的属性-成功
super.protectedInt=4;
getProtectedInt(); // 直接用父类的方法-成功
System.out.println("getProtectedInt-test2:"+getProtectedInt());
protectedInt = 22; // 直接用父类的属性-成功
Base.staticProtectInt=10;
super.getProtectedInt(); // 直接用父类的方法-成功
System.out.println("getProtectedInt-test2:"+getProtectedInt());
}
public void test3(){
TestOtherPackageSubClass t=new TestOtherPackageSubClass();
t.protectedInt=6;
t.getProtectedInt();
System.out.println("getProtectedInt-test3:"+t.getProtectedInt());
}
public static void main(String[] args) {
TestOtherPackageSubClass t=new TestOtherPackageSubClass();
t.test2();
System.out.println(Base.staticProtectInt);
}
}
运行结果为:
getProtectedInt-test2:4
getProtectedInt-test2:22
10
从运行结果 4,22 看出 test2 中不管有没有写super.protectInt,还是直接protectInt 都是指向父类的成员。从这可以看出不在同一包的子类可以访问父类数据成员。
追问那就是子类可以访问,而子类对象不可以访问呗
追答是的 可以这么理解
本回答被提问者采纳