黑马程序员技术交流社区

标题: 这段代码出错的原理是什么? [打印本页]

作者: 胡谭龙    时间: 2015-3-21 14:52
标题: 这段代码出错的原理是什么?
本帖最后由 胡谭龙 于 2015-3-22 07:51 编辑

  1. class Fu
  2. {

  3.         Fu( )

  4.         {

  5.                 System.out.println("fu null");

  6.         }

  7.         Fu(int x)

  8.         {

  9.                 System.out.println("fu x");

  10.         }

  11. }

  12. class Zi extends Fu

  13. {

  14.         Zi( )

  15.         {

  16.                 System.out.println("zi null");

  17.         }

  18.         Zi(int x)

  19.         {

  20.                 this( );

  21.                 super();  //报错的位置。

  22.                 System.out.println("zi:"+x);

  23.         }

  24. }
复制代码
如果Zi zi = new Zi(4);  因为Zi(int x)构造函数内第一行写this(),它默认调用了父类的无参构造函数,第二行的super();有调用了父类的无参构造函数,这么写是错误的 ,但为什么呢,这个语法上感觉说的过去,也就是初始化了两次父类

作者: fantacyleo    时间: 2015-3-21 14:53
this()和super()都只能放在构造函数第一句。所以二者不可能同时出现在一个构造函数中
作者: 胡谭龙    时间: 2015-3-21 15:27
fantacyleo 发表于 2015-3-21 14:53
this()和super()都只能放在构造函数第一句。所以二者不可能同时出现在一个构造函数中 ...

就是想知道原理。。。

作者: fantacyleo    时间: 2015-3-21 15:36
胡谭龙 发表于 2015-3-21 15:27
就是想知道原理。。。

这就是原理,语法就是这么规定的。 java 语言规范原文:
The first statement of a constructor body may be an explicit invocation of another constructor of the same class or of the direct superclass

就像java的赋值运算符用=而pascal用:= 有什么原理呢?就是规定不同嘛
作者: 妖妖    时间: 2015-3-21 15:50
使用this()来从某个构造函数调用同一个类的另外一构造函数,this()只能用在构造函数中,并且必须是第一行语句,而super()是调用父类滴。每一个构造函数是都可以调用this()或者super的,但是不能同时调用,因为他们都要放在第一行,而第一行的位置只有一个,一山不能容二虎啊!
作者: 关山明月    时间: 2015-3-21 17:06
其实 子类中第二个构造函数中的super() 根本就不需要,super()无非就是想调用父类中的无参构造函数,它前面的this()会调用本类中的第一个构造函数,而第一个构造函数中有一句隐式的super(),会调用父类中的第一个构造函数。
作者: 胡谭龙    时间: 2015-3-21 21:05
fantacyleo 发表于 2015-3-21 15:36
这就是原理,语法就是这么规定的。 java 语言规范原文:
The first statement of a constructor body may ...

看来super() 和 this()只能写在第一行
作者: 无力去闹    时间: 2015-3-21 21:38
记得视频里毕老师说过 是个初始化优先级的问题构造函数语句必须要放在第一行
作者: 勇闯☀☀黑马    时间: 2015-3-21 22:34
这个没什么道理记住就行了。一山不能容二虎,就像有些真理我们是无法解释的,那么记住就行了,拿来用。
作者: 张耀东    时间: 2015-3-21 22:53
调用本类无参构造函数this()时,this()里面默认带有super().所以这里重复了




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