为什么我的程序不能访问超类'数组如预期?

时间:2014-01-02 13:38:35

标签: java arrays class variables applet

我在很长一段时间内搜索了这个问题的答案,并且我做了很多不同的测试,并且我已经缩小并简化了我的Java Applet中的一个错误,直到这一小段代码。我猜这个完全相同的错误会出现,如果它不是一个Applet。

这是Main类。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;
public class Main extends Applet{

  public int[] a = {2};
  public int[] b = new int[1];

  public void init(){
    b[0] = 4;
    Otherclass s = new Otherclass();
  }
}

这是其他类。

import java.util.*;
import java.lang.*;
public class Otherclass extends Main{

  public Otherclass(){
    System.out.println(super.a[0]);
    System.out.println(super.b[0]);
  }
}

预期产出:

2
4

实际输出:

2
0

我做错了什么?

提前致谢, 米卡

3 个答案:

答案 0 :(得分:2)

当您创建了Otherclass的实例时,它是Main实例的一个不同实例。因此,在Main实例中b [0] = 4,但未在Otherclass实例中初始化。

您会看到[0]的相同值,因为它是使用类初始化的。

答案 1 :(得分:1)

您在b的构造函数中使用了Otherclass - 这将在Applet启动程序执行init之前执行。

如果你提出这个陈述:

b[0] = 4;

进入Main的构造函数,它将在Otherclass的构造函数体之前执行。

请注意,您在s中初始化init毫无意义。

答案 2 :(得分:0)

原因是您从未在刚刚创建的OtherClass实例中初始化该数组。创建OtherClass的实例时,您在Main init()方法中拥有的代码片段:

b[0] = 4;

从不为OtherClass实例b数组执行,该数组是内存中完全不同的变量,而不是为Main类实例存在的b数组。这就是你没有在数组中看到'4'的原因