繁体   English   中英

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

[英]Why isn't my program accessing the superclass' array as expected?

我花了相当长的时间寻找这个问题的答案,并且做了许多不同的测试,并且将Java Applet中的错误缩小和简化为一小段代码。 我猜想如果不是Applet,也会出现这个完全相同的错误。

这是主班。

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();
  }
}

这是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

我究竟做错了什么?

预先感谢,弥迦

创建Otherclass的实例后,它是与Main实例不同的实例。 因此,b [0] = 4在Main实例中,但未在Otherclass实例中初始化。

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

您在Otherclass的构造函数中使用b ,它将在Applet启动器执行init之前执行。

如果您声明:

b[0] = 4;

进入Main的构造器,它会在Otherclass的构造器主体之前执行。

请注意,您在init初始化s是没有意义的。

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

b[0] = 4;

永远不会对OtherClass实例b数组执行,这与在Main类实例中存在的b数组是一个完全不同的内存变量 这就是为什么在数组中看不到“ 4”的原因

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM