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
;
}
}
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 都是指向父类的成员。
从这可以看出不在同一包的子类可以访问父类数据成员。