首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

构造器的小疑点

2012-08-13 
构造器的小问题,在线等java文件中,public class A2Demo {public static void main(String[] args) {Koo ko

构造器的小问题,在线等

java文件中,
public class A2Demo {
  public static void main(String[] args) {
  Koo koo = new Koo();
  }
}
class Foo {
  public Foo(){
this.test();
  }
  public void test(){
System.out.println("foo");
  }
}
class Koo extends Foo{
  int i = 3;
  public void test(){
System.out.println(i);
  }
}


问: 子类中的 System.out.println(i); 为什么会输出0呢,为什么不输出3呢,thanks

[解决办法]
因为父类构造方法先执行,这时候子类的东西还没初始化呢,当然还是默认值
[解决办法]
有点意思,帮顶一下……
[解决办法]
从父类“回来”后,给i赋值3,再执行子类的构造函数。
[解决办法]
嗯,我Debug跟踪了一下,正如1楼所言。楼主也可以跟踪看看,就明白了。
[解决办法]
产生隐蔽的错误。
[解决办法]
构造子类前先构造父类
父类先构造没有赋值就是0了
[解决办法]
构造器中如果非要调用方法,建议调用static 或final的方法,要不然容易产生隐蔽的bug
[解决办法]
在子类的默认构造器中有个默认调用的方法 super()
就是调用了父类的构造器,此时i还没有初始化,是0。
父类的构造器调用了test()方法
此时的test方法是子类的test()方法而不是父类的,
因为子类的test已经覆盖了父类的方法,所以输出了0。

热点排行