为什么在java继承期间父类中声明的数组在子类中不可见?

为什么在java继承期间父类中声明的数组在子类中不可见?,java,arrays,inheritance,Java,Arrays,Inheritance,我得到的错误是 java:18:错误:找不到符号int x=array[2]; ^符号:变量数组位置:类子1错误 是的,我们可以将数组作为参数传递给方法,代码将编译。但是为什么即使声明数组的类和方法是公共的,这种方法也会导致错误?因为数组不是在父方法中声明的,而是在主方法中声明的。您必须声明一个成员变量: class Parent { public static void main (String[] args) throws java.lang.Exception {

我得到的错误是

java:18:错误:找不到符号int x=array[2]; ^符号:变量数组位置:类子1错误


是的,我们可以将数组作为参数传递给方法,代码将编译。但是为什么即使声明数组的类和方法是公共的,这种方法也会导致错误?

因为数组不是在父方法中声明的,而是在主方法中声明的。您必须声明一个成员变量:

class Parent
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] array=new int[]{1,2,3,4,5};
    }
}
class Child extends Parent
{
    int x=array[2];
    public void MyPrint()
    {
        System.out.println(x);
    }
}
但是,为什么即使类和 声明数组的方法是公共的吗

即使该方法声明为public,也不意味着您可以访问其中声明的对象


int[]数组属于静态方法main,不属于类,作用域为compl。不同,除非修改作用域,否则您将永远无法读取/写入该对象。

int[]array
在方法中声明。这使它成为一个很好的例子。局部变量的可见性有限,它仅对声明它的方法可见。即使从同一类的方法也无法访问它

class Parent
{
    protected int[] array=new int[]{1,2,3,4,5}; // will be visible for the Child
}
如果要从子类访问在超类中声明的变量,请将变量声明为实例变量。

class Parent
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] array=new int[]{1,2,3,4,5}; // local variable, 
        // visible only inside main method
    }
}

因为数组不是在父类中声明的,而是在方法中声明的。正如tkausl所说,您没有在父类中定义数组。您应该仔细阅读变量的范围。事实上,您需要了解局部变量和字段之间的差异。谢谢@tkaus!。我犯了多大的错误啊。
class Parent {

   int[] array=new int[]{1,2,3,4,5}; // instance variable, 
   // is visible for other methods in same class
   // and for subclasses. 

}