[英]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.