目标
通过测试code展示访问范围修饰符的作用,并总结结果。
测试code
定义一个class,具有四种不同访问范围修饰符的field。
package com.chl.pone;
public class Father {
private int privateValue;
int friendlyInt ;
protected int protectedValue;
public int publicValue;
}
测试 :相同包,通过对象实例直接访问field。
package com.chl.pone;
public class ClassSamePackage {
public void publicMethod(){
Father father = new Father();
father.friendlyInt = 1;
father.protectedValue = 1;
father.publicValue = 1;
}
}
测试:相同包,子类访问super field 。
package com.chl.pone;
public class ChildSamePackage extends Father{
public void publicMethod(){
this.friendlyInt = 1;
this.protectedValue = 1;
this.publicValue = 1;
}
}
测试:不同包,子类访问super field。
package com.chl.ptwo;
import com.chl.pone.Father;
public class ChildNotSamePackage extends Father{
public void publicMethod(){
this.protectedValue = 1;
this.publicValue = 1;
}
}
测试:不同包,通过对象实例直接访问field。
package com.chl.ptwo;
import com.chl.pone.Father;
public class ClassNotSamePackage {
public void publicMethod(){
Father father = new Father();
father.publicValue = 1;
}
}
结论
访问修饰符 | 本类内部 | 相同包(子类或其他类) | 不同包子类 | 任何地方 |
private | OK | |||
friendly | OK | OK | ||
protected | OK | OK | OK | |
public | OK | OK | OK | OK |