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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈贺 中级黑马   /  2013-8-11 11:17  /  1173 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Text {
  2.         public int x = 2;
  3.         public int y = 5;
  4.         public Text(int x, int y) {
  5.                 super();
  6.                 this.x = x;
  7.                 this.y = y;
  8.         }
  9. }
  10. super();在这里有什么用,写不写有区别吗?
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
子类的所有的构造函数,默认的都会访问父类中空参数的构造函数因为子类中每一个构造函数内的第一行都有一句隐式的super();

你的这里的super();相当于访问Object类中的空参数的构造函数,super()是隐式存在的,你不写这句其实构造函数的第一行都有这一句,所以写不写没有区别。
{:soso_e141:}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
子类的所有的构造函数,默认的都会访问父类中空参数的构造函数
因为子类中每一个构造函数内的第一行都有一句隐式的super();你不写这句其实构造函数的第一行都有这一句
会调用父类中的空参数构造函数,你不写这句其实构造函数的第一行也会默认的去调用super();
所以写不写没什么区别,但是super() 括号里面有参数的话就另当别论了 就会调用父类有参的构造函数
回复 使用道具 举报
super();在这里有什么用,写不写有区别吗?
super();表示的是调用父类构造方法 无参的构造方法写不写都无所谓
假如有参数就不一样了 有参数就会调用父类有参构造方法 这个就有区别了
回复 使用道具 举报
按照继承的规则来讲,构造方法是不能被继承的,因为子类继承父类的方法,覆盖时方法名必须和父类的保持一致,而构造方法显然是不可以的。
java中存在这么一个机制,所有子类的构造方法都默认调用父类隐式的不带参数的构造方法,即super(),也就是说就算你不显式的写出来,java在编译的时候也会自动给你加上这行代码。
而如果父类显式定义了自己的构造方法(无论构造方法有没有参数),那么子类就必须显式的指出自己的构造方法调用的是父类哪个构造方法。
不知道楼主能不能理解,与君共同进步。加油!!!
回复 使用道具 举报
有就多一条空语句,没有就少一条空语句.
回复 使用道具 举报
隐式或显示的super()都是为了明确父类数据的初始化的,而我们继承父类就必须要明确父类数据初始化状态,所以必须有super。而隐式的调用的是父类无参的构造函数,如果父类没有无参的构造函数就需要自己通过super(参数)去调用它。所以你这里的super没有任何意义。
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马