黑马程序员技术交流社区

标题: 关于子父类的构造方法问题 [打印本页]

作者: yang1352546    时间: 2014-5-27 21:41
标题: 关于子父类的构造方法问题
本帖最后由 yang1352546 于 2014-5-29 20:30 编辑

子类中所有的构造,无论重载几个,每一个的第一行默认super(),访问父类空参数的构造方法,如果父类有一个带参构造方,没有空参构造方法,这种情况怎么访问父类的构造方法。可以不访问父类空参的函数么。
作者: 成小龙    时间: 2014-5-27 21:50
调用父类构造方法super.
作者: 葛晓东    时间: 2014-5-27 22:01
子类中所有的构造,无论重载几个,每一个的第一行默认super(),访问父类空参数的构造方法
如果父类,没有空参数的构造方法,子类的构造方法,没有写super(),直接编译失败
作者: 927233671    时间: 2014-5-27 22:07
本帖最后由 927233671 于 2014-5-27 22:15 编辑

如果父类中没有空参数的构造方法,只声明了有参的构造方法(没有无参构造方法),那么子类要指定访问父类的有参构造方法,如果不指定,会报错;因为父类没有无参构造方法,但是子类有隐式的super();所以会报错,总结一句话,父类如果隐去,那么子类也隐去,父类不隐(声明了有参,未声明无参),那么子类也不隐了,要指定有参的。
  1. class Fu
  2. {
  3.         
  4.         Fu(int x)
  5.         {
  6.                 System.out.println("Fu run");
  7.         }
  8.                
  9. }
  10. class Zi extends Fu
  11. {
  12.         Zi()
  13.         {
  14.                 super(4);//必须写这行,不然会报错;
  15.                 System.out.println("Zi run");
  16.         }

  17.         
  18. }




  19. class Demo1
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Zi z=new Zi();
  24.         }
  25. }
复制代码

作者: 武维京    时间: 2014-5-27 22:13
首先,子类不会继承父类的构造方法,也不能被复写,但是子类在实例化对象时,
如果子类的构造方法没有显示调用父类的方法,则将自动调用父类默认构造方法。
如果父类没有不带参数的构造方法,且子类的构造方法中又没显示调用父类其他构造方法,
则Java编译器将报告错误。所以子类使用父类的构造方法是通过super关键字实现的。
作者: 战狼    时间: 2014-5-27 23:00
super是与父类中的构造方法一一对应的,有参数的就调用有参数的,无参数代表默认,如果父类中无无参数的方法,而子类中调用有参数的方法,编译失败,用集成开发工具的话,会直接报错。
作者: 执笔梦    时间: 2014-5-29 21:53
如果不指定,会报错.




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