我试图理解受保护和打包访问的想法,我已经在编译器上尝试过它们,但它一直告诉我有问题
public class example{
int s = example2.v;
public static void main(String args[]){
}
}
public class example2 {
int v = 0 ;
}
谁能帮我这个?为什么它说:
不能从静态上下文引用非静态变量 v。
变量's'不是静态的!
您试图以静态方式引用 v ,这就是问题所在。每当您这样做时ClassName.fieldName
,就意味着您正在以静态方式访问资源。你首先必须实例化类然后做myReferenceVariable.fieldName
public class example{
example2 myExample = new example2();
int s = myExample.v;
这应该有效。
还要记住 Java 命名约定的类名以大写字母开头。不是编译的问题,而是可读性的问题。
不,s
绝对不是静态的。但两者都不是v
。这就是你的编译器告诉你的。
由于变量确实是包作用域,所以可以实例化一个新example2
类,直接调用。
new example2().v;
通常,您将来会希望使用 getter 和 setter。这允许封装和信息隐藏,因为该变量v
是完全开放的,可以被该包中的任何其他类修改。