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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alexsoon 中级黑马   /  2014-7-2 16:26  /  812 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Parent
{
               public Parent(int i)     //  这个构造方法有个参数
               {
                       System.out.println("Here is Parent");
               }
}

public class Child extends Parent
{
              public Child()
              {
                        System.out.println("Here is Child");
              }

              public static void main(String[] args)
              {
                        Child ch = new Child();    //  生成对象时没有参数
              }
}
每个类不是都有一个默认的不带参数的构造方法吗?
生成子类对象时,可以寻找到那个默认的构造方法啊,为什么提示找不到呢?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

倒序浏览
一个类,你没有定义构造函数时,虚拟机会默认添加一个空构造函数,但是你定义了构造函数,虚拟机就不会添加了, 楼主你已经定义了一个带参数的构造函数,所以要么new对象时去传参,要么你在类中再定义一个空参构造函数

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 2 0
子的构造函数第一行隐藏了super()去调用父类的构造函数,现在你在父类中定义了新的构造函数,java就不会给父类添加默认构造函数了,所以new Child()的时候先去父类找构造函数的时候(super(i))会找不到。要想执行,我试了一下,首先子类构造函数改成Child(int i),然后在子类的构造函数第一行加个super(i),这样子父类的构造函数都会运行了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
dispensable 来自手机 中级黑马 2014-7-3 04:36:40
板凳
2楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马