黑马程序员技术交流社区

标题: 构造方法问题 [打印本页]

作者: 陈贺    时间: 2013-8-11 11:17
标题: 构造方法问题
  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();在这里有什么用,写不写有区别吗?
复制代码

作者: 小发    时间: 2013-8-11 12:13
子类的所有的构造函数,默认的都会访问父类中空参数的构造函数因为子类中每一个构造函数内的第一行都有一句隐式的super();

你的这里的super();相当于访问Object类中的空参数的构造函数,super()是隐式存在的,你不写这句其实构造函数的第一行都有这一句,所以写不写没有区别。
{:soso_e141:}
作者: 黑马王晓明    时间: 2013-8-11 15:28
子类的所有的构造函数,默认的都会访问父类中空参数的构造函数
因为子类中每一个构造函数内的第一行都有一句隐式的super();你不写这句其实构造函数的第一行都有这一句
会调用父类中的空参数构造函数,你不写这句其实构造函数的第一行也会默认的去调用super();
所以写不写没什么区别,但是super() 括号里面有参数的话就另当别论了 就会调用父类有参的构造函数
作者: 茶念小手    时间: 2013-8-11 22:08
super();在这里有什么用,写不写有区别吗?
super();表示的是调用父类构造方法 无参的构造方法写不写都无所谓
假如有参数就不一样了 有参数就会调用父类有参构造方法 这个就有区别了
作者: masterV    时间: 2013-8-11 22:38
按照继承的规则来讲,构造方法是不能被继承的,因为子类继承父类的方法,覆盖时方法名必须和父类的保持一致,而构造方法显然是不可以的。
java中存在这么一个机制,所有子类的构造方法都默认调用父类隐式的不带参数的构造方法,即super(),也就是说就算你不显式的写出来,java在编译的时候也会自动给你加上这行代码。
而如果父类显式定义了自己的构造方法(无论构造方法有没有参数),那么子类就必须显式的指出自己的构造方法调用的是父类哪个构造方法。
不知道楼主能不能理解,与君共同进步。加油!!!
作者: 曾文德    时间: 2013-8-11 22:45
有就多一条空语句,没有就少一条空语句.
作者: yangxin540    时间: 2013-8-12 11:44
隐式或显示的super()都是为了明确父类数据的初始化的,而我们继承父类就必须要明确父类数据初始化状态,所以必须有super。而隐式的调用的是父类无参的构造函数,如果父类没有无参的构造函数就需要自己通过super(参数)去调用它。所以你这里的super没有任何意义。
作者: 以防万一    时间: 2013-8-13 22:25
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作




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