protected是在同包内的能访问吧
解决方案 »
- 挑战你的正则,看清楚要求再回答
- 给定一个字符串text,将其所有的连续数字串提取到字符串数组String[] array的最好方法 java
- 来帮我解释SAX解析XML?
- 如何产生随机汉字?
- 非jsp关于关键字高亮问题
- 有个XML的DTD,写了半天都有问题,请指教啊~~
- applet在ie中不能浏览
- 请问通过java怎么样能画出方块图,直线图(可带箭头),虚线图(可带箭头)的图啊?
- swing 包怎么回事呀???
- 那位大哥做过JAVA-VRML-EAI 的工作的,那里可以下到有关的包和资料阿!
- 如何把JAR文件加到APPLICATON中并打包输出成EXE文件?
- 为什么我在服务器端写了一个applet,在服务器可以运行,客户访问取显示不了
class B extends A{
private int b ;
public static void main(String args[]){
A a=new A();
a.b=100;
}
}
你把protected int b=-128;改为static protected int b = -128;
楼主是new 了一个A啊,用A的实例a来访问的啊?
有可能是你看的书写错了,还有可能是你理解错了。protected关键字修饰的变量只能在同一个包中互相访问,这一点是肯定的。若你想改你的程序,可以在下面文件中加入package p1;然后还要在环境变量中设置p1的路径,这样你就不会出错了。
你的理解有问题,protected关键字修饰的变量,不是象你说的那样只能在同一个包中互相访问。只是在同一个包里,就如同public;而在别的包里只要是它的子类,也是可以访问到的,楼主出的错误,我刚才已经解释过了,是在static方法中不能访问非static的变量的问题。
你好
我的意思是说,楼主是用了一个A的实例来访问A中的变量,应该不是static的问题
在一个static的方法中不能直接访问一个非static的变量或方法,但用一个实例来对它的变量变量进行访问应该没错吧:
public class Try{
int i = 0;
public static void main(String[] argc){
i = 2;//这样是不对的,因为i不是static的
Try tr = new Try();
tr.i = 2;//这样应该没错的吧?
}
}
我总结一下吧:
如果一个类(假定叫A)有个protected的成员变量(假定变量名为var),
1。和A类处在同一个包的类可以访问到var,就像是public的一样;
2。和A类不在同一个包的类(并且没有继承关系)对var没有访问权限;
3。A的子类可以访问,但如果子类和A不在同一个包中的话,则不能用A类的对象访问,可以用子类的对象访问(this也算子类的对象);
*:以上假定访问时都不是在静态方法中访问如果var又是static的,则在子类中即可用父类的对象也可用子类的对象访问var(即使是子类和A不在同一个包中).
出现的错误是这样:b.java:5: b has protected access in p1.A
可能的确是我理解错了,有的教材说protected可以在不同包的子类中能够访问,但是没有明确说是否访问实例变量。
我的疑问和 fantasyfire一样,如果直接用b=100,必须是static。看来yuanmeng163所说“A的子类可以访问,但如果子类和A不在同一个包中的话,则不能用A类的对象访问,可以用子类的对象访问(this也算子类的对象)”有道理。