课程实验过程中,遇到了缺省作用域修饰符的变量无法被外部访问的问题。当时和老师同学讨论没有结果,自己动手行进行了验证。
结论:和protected关键字修饰的变量、方法一致。
例子:
如图,编写一个java项目,类F与类A、C在同一package中,与类B在不同package中。

package com.a;
public class F {
int n;
public int nPublic;
protected int nProtected;
private int nPrivate;
void func(){}
public void funcPublic(){}
protected void funcProtected(){}
private void funcPrivate(){}
}
编写在F中编写public,private,protected,不写修饰符的方法、变量各四个;
编写类A,B,C:C继承F,A与F在一个package中,B与F不在一个package中。
package com.a;
public class C extends F{
public void get(){
super.func();
super.funcProtected();
super.funcPublic();
super.funcPrivate();
int n;
n=super.n;
n=super.nProtected;
n=super.nPublic;
n=super.nPrivate;
}
}
package com.a;
public class A {
F f;
public void get(){
f.func();
f.funcProtected();
f.funcPublic();
f.funcPrivate();
int n;
n=f.n;
n=f.nPublic;
n=f.nProtect;
n=f.nPrivate;
}
}
package com.b;
import com.a.F;
public class B {
F f;
public void get(){
f.func();
f.funcProtected();
f.funcPublic();
f.funcPrivate();
int n;
n=f.n;
n=f.nPublic;
n=f.nProtect;
n=f.nPrivate;
}
}
逐一分析结果:
类C是类F的子类,不写修饰符的变量、方法可以被C使用;
类A和类F在同一个包下,不写修饰符的变量、方法都被A使用;
类B和类F不再同一个包下,不写修饰符的变量、方法都不可以被B使用。
对比发现,和protected关键字的表现一致
3265

被折叠的 条评论
为什么被折叠?



