版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/81347204
package p1;
//父类
public class P1Class {
private int i1 = 0;
int defaultInt = 0;
protected int j1 = 0;
public int k1 = 0;
public static void main(String[] args) {
P1Class p1Class = new P1Class();
p1Class.getI1();//T
p1Class.getJ1();//T
p1Class.getDefaultInt();//T
p1Class.getK1();//T
}
private int getI1() {
return i1;
}
protected int getJ1() {
return j1;
}
public int getK1() {
return k1;
}
int getDefaultInt() {
return defaultInt;
}
}
package p1;
//同包子类
public class S2Class extends P1Class {
public static void main(String[] args) {
P1Class p1Class = new P1Class();
p1Class.getI1();//F
p1Class.getJ1();//T
p1Class.getDefaultInt();//T
p1Class.getK1();//T
S2Class s2Class = new S2Class();
s2Class.getI1();//F
s2Class.getJ1();//T
s2Class.getDefaultInt();//T
s2Class.getK1();//T
}
}
package p1;
//同包非子类
public class OtherClassSamePackage {
public static void main(String[] args) {
P1Class p1Class = new P1Class();
p1Class.getI1();//F
p1Class.getJ1();//T
p1Class.getDefaultInt();//T
p1Class.getK1();//T
}
}
package s1;
import p1.P1Class;
//不同包子类
public class S1Class extends P1Class {
public static void main(String[] args) {
P1Class p1Class = new P1Class();
p1Class.getI1();//F
p1Class.getJ1();//F,protected请注意!
p1Class.getDefaultInt();//F
p1Class.getK1();//T
S1Class s1Class = new S1Class();
s1Class.getI1();//F
s1Class.getJ1();//T,protected请注意!
s1Class.getDefaultInt();//F
s1Class.getK1();//T
}
}
package s1;
import p1.P1Class;
//不同包非子类
public class OtherClass {
public static void main(String[] args) {
P1Class p1Class = new P1Class();
p1Class.getI1();//F
p1Class.getJ1();//F
p1Class.getDefaultInt();//F
p1Class.getK1();//T
}
}
T表示正确,F表示错误
总结如下:
代码结构如下:
在子类中,子类对象可以访问其从父类继承而来的protected方法,而父类对象不能访问该protected方法。
参考: