黑马程序员技术交流社区

标题: 为什么父类中确守空参数的构造函数就编译失败? [打印本页]

作者: Taekwon-boy    时间: 2015-4-21 19:06
标题: 为什么父类中确守空参数的构造函数就编译失败?
package com.itheima;

class Super
{
        //Super(){}
        int i=0;
        public Super(String s)
        {
                i=1;
        }
}
class Demo1 extends Super

{
        public Demo1(String s)
        {
                i=2;
        }
        public static void main(String[] args)
        {
                Demo1 d=new Demo1("yes");
                System.out.println(d.i);
        }
}
//为什么Supper注释掉就编译失败?


作者: 君嘘    时间: 2015-4-21 19:32
本帖最后由 君嘘 于 2015-4-21 19:41 编辑

因为子类的构造函数第一行默认有个super(),就是把父类的构造函数继承过来的意思,因为子类要先在父类进行初始化,然后子类再进行自己特有的初始化。

你的父类中自定义了构造函数,所以就没有空参数的构造函数了。子类构造函数中默认的super()语句也就发生调用错误提示了

解决方法有两个
①就是像你那样,父类中弄一个空参数的构造函数。
②在子类的构造函数的第一行加上super(s),意思是把s传给父类初始化之后再执行子类的初始化.

作者: Taekwon-boy    时间: 2015-4-21 20:06
君嘘 发表于 2015-4-21 19:32
因为子类的构造函数第一行默认有个super(),就是把父类的构造函数继承过来的意思,因为子类要先在父类进行 ...

在子类的构造函数的第一行加上super(s)
还是提示错误呢?
作者: 907888614    时间: 2015-4-21 20:14
子类,第一行默认super(), 你父类定义了构造函数,super()也就没有了。子类加一个super(S)放在第前面
作者: 君嘘    时间: 2015-4-21 20:40
Taekwon-boy 发表于 2015-4-21 20:06
在子类的构造函数的第一行加上super(s)
还是提示错误呢?

没错啊。
super(s);
首字母是小写的,还要有分号代表结束这一行语句。
我是拿你代码试过了才回帖的
作者: yelebron    时间: 2015-4-21 21:25
因为在你创立对象d时,子类和父类要同时加载
作者: itheima_llt    时间: 2015-4-21 22:44
顶你一下,好贴要顶!
作者: fanxia_2007    时间: 2015-4-21 22:56
楼上已经给出了答案,不解释了!




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