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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

Android那边水太深了,问个问题连看的人都很少
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();    //  生成对象时没有参数
              }
}
每个类不是都有一个默认的不带参数的构造方法吗?
生成子类对象时,可以寻找到那个默认的构造方法啊,为什么提示找不到呢?

10 个回复

倒序浏览
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数;
当在类中自定义了构造函数后,默认的构造函数就没哟了;
子类的所有的构造函数默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super()语句形式来指定要访问父类中的哪一个构造函数;
class Parent
{
               public Parent(int i)     //  这个构造方法有个参数
               {
                       System.out.println("Here is Parent");
               }
}

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

              public static void main(String[] args)
              {
                        Child ch = new Child();    //  生成对象时没有参数
              }
}
回复 使用道具 举报 1 0
原因是Parent类中你自定义了一个有参数的构造函数,该类就不再定义默认的空构造函数了.
这个程序可以在Parent类中补一个空参数的构造函数就o了.
class Parent
{
           public 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();   
          }
}
回复 使用道具 举报
谢谢了。原来这样
回复 使用道具 举报
楼上解释的很清楚
回复 使用道具 举报
sugar 发表于 2014-7-2 21:15
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数;
当在类中自定义了构造函数后, ...

说的比我的好
回复 使用道具 举报
过来学习
回复 使用道具 举报
父类中没有空的构造函数  继承时  子类的构造函数第一行默认调用父类构造函数 所以会报错
回复 使用道具 举报
那是在你没有自定义构造函数时才会启用默认的。
回复 使用道具 举报
2楼解释的很对
回复 使用道具 举报
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数; 当在类中自定义了构造函数后,默认的构造函数就没了,如果需要的话必须手动加上一个无参构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马