为什么在java继承期间父类中声明的数组在子类中不可见?
我得到的错误是 java:18:错误:找不到符号int x=array[2]; ^符号:变量数组位置:类子1错误为什么在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 {
是的,我们可以将数组作为参数传递给方法,代码将编译。但是为什么即使声明数组的类和方法是公共的,这种方法也会导致错误?因为数组不是在父方法中声明的,而是在主方法中声明的。您必须声明一个成员变量:
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.
}