黑马程序员技术交流社区

标题: 继承构造方法的问题... [打印本页]

作者: alexsoon    时间: 2014-7-2 20:28
标题: 继承构造方法的问题...
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();    //  生成对象时没有参数
              }
}
每个类不是都有一个默认的不带参数的构造方法吗?
生成子类对象时,可以寻找到那个默认的构造方法啊,为什么提示找不到呢?
作者: sugar    时间: 2014-7-2 21:15
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数;
当在类中自定义了构造函数后,默认的构造函数就没哟了;
子类的所有的构造函数默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式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();    //  生成对象时没有参数
              }
}

作者: 遗失的美好YXJ    时间: 2014-7-2 21:20
原因是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();   
          }
}
作者: alexsoon    时间: 2014-7-2 21:21
谢谢了。原来这样
作者: lc2015    时间: 2014-7-2 23:16
楼上解释的很清楚
作者: 遗失的美好YXJ    时间: 2014-7-2 23:41
sugar 发表于 2014-7-2 21:15
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数;
当在类中自定义了构造函数后, ...

说的比我的好
作者: 刘亚东    时间: 2014-7-2 23:42
过来学习
作者: 引子    时间: 2014-7-6 08:52
父类中没有空的构造函数  继承时  子类的构造函数第一行默认调用父类构造函数 所以会报错
作者: hm521824    时间: 2014-7-6 10:19
那是在你没有自定义构造函数时才会启用默认的。
作者: 奋斗的小耗子    时间: 2014-7-6 10:29
2楼解释的很对
作者: DKID    时间: 2014-7-6 11:59
当一个类中没有定义构造函数,系统会默认给该类加入一个空参数的构造函数; 当在类中自定义了构造函数后,默认的构造函数就没了,如果需要的话必须手动加上一个无参构造函数




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