论坛首页 入门讨论版 Java

高手给解释一下为什么会是这样?

浏览 352 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-01-24
class Super {
private int s = 100;

Super() {
abc();
}

void abc() {
System.out.println("s " + s);
}
}

class Sub extends Super {

private int s1 = 200;

void abc() {
System.out.println("s1 " + s1);
}

public static void main(String[] args) {
new Sub();
}

}
运行结果为什么会是:
s1 0


如果将上面的两个类文件放到不同的package中就没有问题,如下:
package f.practice;

public class Super {
private int s = 100;

public Super() {
abc();
}

void abc() {
System.out.println("s " + s);
}
}


package f.practice.sub;

import f.practice.Super;


public class Sub extends Super{

private int s1 = 200;

void abc() {
System.out.println("s1 " + s1);
}

public static void main(String[] args) {
System.out.println("Hello");
new Sub();
}
}


个人感觉是Super和Sub的abc方法同属一个package,可见度相同,造成了混乱。

只是猜想,即便是这样,为什么会是这样呢?

期待高手给解释一下
   
最后更新时间:2008-01-24
我又重新实验了一下,将private int s1=200;改为private static int s1=200;
这样就输出
s1 200
了。
因为构造方法优先执行,所以在构造方法中调用abc方法时(Sub)对s1的赋值200的操作还没执行,所以s1还是默认的初始值0
   
0 请登录后投票
论坛首页 入门讨论版 Java

跳转论坛:
JavaEye推荐