浏览 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,可见度相同,造成了混乱。 只是猜想,即便是这样,为什么会是这样呢? 期待高手给解释一下 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-01-24
我又重新实验了一下,将private int s1=200;改为private static int s1=200;
这样就输出 s1 200 了。 因为构造方法优先执行,所以在构造方法中调用abc方法时(Sub)对s1的赋值200的操作还没执行,所以s1还是默认的初始值0 |
|
| 返回顶楼 | |


