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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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注释掉就编译失败?

7 个回复

倒序浏览
本帖最后由 君嘘 于 2015-4-21 19:41 编辑

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

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

解决方法有两个
①就是像你那样,父类中弄一个空参数的构造函数。
②在子类的构造函数的第一行加上super(s),意思是把s传给父类初始化之后再执行子类的初始化.
回复 使用道具 举报
君嘘 发表于 2015-4-21 19:32
因为子类的构造函数第一行默认有个super(),就是把父类的构造函数继承过来的意思,因为子类要先在父类进行 ...

在子类的构造函数的第一行加上super(s)
还是提示错误呢?
回复 使用道具 举报
子类,第一行默认super(), 你父类定义了构造函数,super()也就没有了。子类加一个super(S)放在第前面
回复 使用道具 举报
Taekwon-boy 发表于 2015-4-21 20:06
在子类的构造函数的第一行加上super(s)
还是提示错误呢?

没错啊。
super(s);
首字母是小写的,还要有分号代表结束这一行语句。
我是拿你代码试过了才回帖的
回复 使用道具 举报
因为在你创立对象d时,子类和父类要同时加载
回复 使用道具 举报
顶你一下,好贴要顶!
回复 使用道具 举报
楼上已经给出了答案,不解释了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马