to yuanmeng163(今天我有空) 你好 我的意思是说,楼主是用了一个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;//这样应该没错的吧? } }
首先谢谢各位! 出现的错误是这样:b.java:5: b has protected access in p1.A 可能的确是我理解错了,有的教材说protected可以在不同包的子类中能够访问,但是没有明确说是否访问实例变量。 我的疑问和 fantasyfire一样,如果直接用b=100,必须是static。看来yuanmeng163所说“A的子类可以访问,但如果子类和A不在同一个包中的话,则不能用A类的对象访问,可以用子类的对象访问(this也算子类的对象)”有道理。
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也算子类的对象)”有道理。