A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hanrongle 中级黑马   /  2013-7-6 17:08  /  836 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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种解决方法实际上是指定编译器不要寻找父类的默认构造方法,而是去寻找带一个字符串为参数的构造方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

1 个回复

倒序浏览
这两种方法都没错。这样就证明了在建立子类对象的构造函数是怎样都对象初始化。
1父类构造函数
2子类构造函数
由于你这子父类没有属性。不能证明属性初始化是怎么进行的。可以加个方法属性进去。就可以推出。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马