一道关于继承的问题,立即结贴。
1. class Super2 {
2. public int i = 0;
3.
4. public Super2 (String text) {
5. i = 1;
6. }
7. }
8.
9. public class Sub extends Super2 {
10. public Sub (String text) {
11. i = 2;
12. }
13.
14. public static void main (String args[]) {
15. Sub sub = new Sub ("Hello");
16. System.out.println(sub.i);
17. }
18. }
如果这么写,就会在第10行出现编辑错误,而如果在Sub的构造函数中这么写:
public Sub(String text)
{
super(text);
i = 2;
}
就会没有错误,能够正确运行。
问:为什么该子类中必须要用super(text)调用一下父类的构造函数,不调不行?
问题点数:20、回复次数:3Top
1 楼happysmiler(笑开心)回复于 2004-12-02 22:51:05 得分 15
因为子类对象在创建的时候,首先去调用父类的无参构造函数。而父类构建了有参构造函数后,其默认的无参失效。因此出错。你可以显式的在父类里加上无参空构造函数。可运行Top
2 楼123xxx(香克斯)回复于 2004-12-02 22:54:23 得分 0
同上Top
3 楼catblue(佛家说:一粒沙中看世界。)回复于 2004-12-03 09:44:58 得分 5
super(text)是生成父类,没有父就没有子嘛。
你可以在父类中再写一个不带参数的构造函数,这样在子类中就不需要调用父类的构造函数了,因为这样系统会自动调用默认的(不带参数的构造函数)。Top




