受保护和包访问

时间:2013-01-04 02:00:36

标签: java package

我正在尝试理解受保护和封装acesses的想法,我已经在编译器上尝试了它们但它一直告诉我存在问题

public class example{

    int s = example2.v;

    public static void main(String args[]){


    }
} 

public class example2 {

    int v = 0 ;

}

任何人都可以帮我吗?为什么会说:

  

非静态变量v不能从静态上下文中引用。

变量's'不是静态的!

2 个答案:

答案 0 :(得分:5)

您试图以静态方式引用v,这就是问题所在。每当你执行ClassName.fieldName时,这意味着你以静态方式访问资源。首先必须实例化该类,然后执行myReferenceVariable.fieldName

public class example{
    example2 myExample = new example2();
    int s = myExample.v;

这应该有用。

还要记住Java命名约定的类名以大写字母开头。不是恭维问题,而是可读性问题。

答案 1 :(得分:0)

不,s绝对不是静态的。但v也不是。{1}}。这是你的编译器告诉你的。

由于变量确实是包范围,因此您可以实例化一个新的example2类并直接调用它。

new example2().v;

一般情况下,您希望将来使用getter和setter。这允许封装和信息隐藏,因为变量v完全开放,可以被该包中的任何其他类修改。