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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yang1352546 中级黑马   /  2014-5-27 21:41  /  1226 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yang1352546 于 2014-5-29 20:30 编辑

子类中所有的构造,无论重载几个,每一个的第一行默认super(),访问父类空参数的构造方法,如果父类有一个带参构造方,没有空参构造方法,这种情况怎么访问父类的构造方法。可以不访问父类空参的函数么。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 视频熟练度不够~继续加油

查看全部评分

7 个回复

倒序浏览
调用父类构造方法super.

点评

你这也太简略了  发表于 2014-5-27 22:14
回复 使用道具 举报 0 1
子类中所有的构造,无论重载几个,每一个的第一行默认super(),访问父类空参数的构造方法
如果父类,没有空参数的构造方法,子类的构造方法,没有写super(),直接编译失败
回复 使用道具 举报
本帖最后由 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
首先,子类不会继承父类的构造方法,也不能被复写,但是子类在实例化对象时,
如果子类的构造方法没有显示调用父类的方法,则将自动调用父类默认构造方法。
如果父类没有不带参数的构造方法,且子类的构造方法中又没显示调用父类其他构造方法,
则Java编译器将报告错误。所以子类使用父类的构造方法是通过super关键字实现的。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
super是与父类中的构造方法一一对应的,有参数的就调用有参数的,无参数代表默认,如果父类中无无参数的方法,而子类中调用有参数的方法,编译失败,用集成开发工具的话,会直接报错。
回复 使用道具 举报
如果不指定,会报错.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马