黑马程序员技术交流社区

标题: 关于构造方法 [打印本页]

作者: hanrongle    时间: 2013-7-6 17:08
标题: 关于构造方法
class SuperClass
{
SuperClass(Stringstr)
{
System.out.println("Super with a string.");
}
}
public class SubClass extends SuperClass
{
SubClass(Stringstr)
{
System.out.println("Sub with a string.");
}
public staticvoid main(String[] args)
{
SubClass sub = new SubClass("sub");
}
}
  在JDK下编译此程序不能成功。正如上例中说的:程序在初始化子类时先要寻找其父类的默认构造方法,结果没找到,那么编译自然不能通过。
  解决这个问题有两个办法:
  1.在父类中增加一个默认构造方法。
  2.在子类的构造方法中增加一条语句:super(str); 且必须在第一句。
  这两种方法都能使此程序通过编译,但就本程序来说运行结果却不相同。
  第1种方法的运行结果是:
  Sub with a string.
  第2种方法的运行结果是:
Super with a string.
Sub with a string.
  第2种解决方法实际上是指定编译器不要寻找父类的默认构造方法,而是去寻找带一个字符串为参数的构造方法。
作者: 黄少海    时间: 2013-7-6 19:57
这两种方法都没错。这样就证明了在建立子类对象的构造函数是怎样都对象初始化。
1父类构造函数
2子类构造函数
由于你这子父类没有属性。不能证明属性初始化是怎么进行的。可以加个方法属性进去。就可以推出。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2