Java中子类构造调用父类构造之前写代码会报错

xwine_jun 2016-07-29 01:45:53

/**
* Created by jun on 2016/7/29.
*/
public class TestSub extends TestSupper {

public TestSub(String name){

System.out.println("我在子类有参数构造方法中将要执行父类有参构造");

super(name);

}
}
...全文
289 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-08-02
  • 打赏
  • 举报
回复
这是 java 的规定 因为一个对象初始化时,必须先初始化好父类,也就是先调用父类构造函数,并且调用父类构造器必须是构造器的第一条语句 另一个代码可以验证: 写个父类,这个类只有一个带参数的构造器,子类继承它时,必须在构造器里显式调用父类构造器,否则编译通不过
qq_33621966 2016-07-29
  • 打赏
  • 举报
回复
楼上正解,只能放第一行,,你可以用反编译工具来检测先看看
zoeg 2016-07-29
  • 打赏
  • 举报
回复
爹不能比娃晚出生啊!
sky_08_06_02 2016-07-29
  • 打赏
  • 举报
回复
子类在构造函数执行的时候,先找父类的构造函数,如果没有显示调用父类的构造函数,默认找父类的无参构造函数
hx_wang007 2016-07-29
  • 打赏
  • 举报
回复
因为执行子类的构造方法前会先去调用父类的构造方法。并且如果不写的话是会默认加上的。如果写的话必须写在子类构造方法第一行。
soton_dolphin 2016-07-29
  • 打赏
  • 举报
回复

public class TestSub extends TestSupper {
  
  public TestSub(String name){
   super(name);
   System.out.println("我在子类有参数构造方法中将要执行父类有参构造");
  
      //super(name);
  
  }
}
soton_dolphin 2016-07-29
  • 打赏
  • 举报
回复

public class TestSub extends TestSupper {
 
  public TestSub(String name){
   super(name);
   System.out.println("我在子类有参数构造方法中将要执行父类有参构造");
 
      //super(name);
 
  }
}
soton_dolphin 2016-07-29
  • 打赏
  • 举报
回复
因为super() 或者this()必须是子类构造器里第一个执行的语句。
nn_784832001 2016-07-29
  • 打赏
  • 举报
回复
因为虚拟机在加载子类构造方法之前会先加载父类的构造方法
xwine_jun 2016-07-29
  • 打赏
  • 举报
回复
我在父类构造方法里面写了一个带一个参数的构造方法,但是为什么我在子类构造方法中调用父类构造方法之前写的那个代码会报错呢

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧