关于构造函数的执行顺序?

cyxyz 2005-10-31 10:59:21
class Parent {
Parent() {System.out.println("xxxxx");}
Parent(int i) {System.out.println(i); }
}

class Child extends Parent {
Child() {
super(1);
}
}
class AA{
public static void main(String args[])
{
new Child();}}

结果只显示1。为什么?

书上不是说如果子类自己定义了构造函数,则在创建新对象时先执行继承父类的无参构造函数,然后再执行自己的构造函数吗??
...全文
215 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atai-Lu 2005-11-01
  • 打赏
  • 举报
回复
在子类里赋值的是1,输出的难道还能是什么?
第一行没有输出?在子类里面已经被修改……
紫炎圣骑 2005-11-01
  • 打赏
  • 举报
回复
呵呵
晨星 2005-11-01
  • 打赏
  • 举报
回复
Java这样规定是有好处的,否则,当你不想通过默认构造函数构造父类部分时,就几乎没有办法阻止父类的有两个构造函数被执行,而前面执行的那个即使没有负面影响,顶多也就是没用。
tanghuan 2005-10-31
  • 打赏
  • 举报
回复
如果构造方法中第一句使用了super(参数列表)方式显式调用父类的构造方法,就用指定的
否则,使用缺省的super();如果父类没有这个缺省的构造方法,就会出现编译错误。
treeroot 2005-10-31
  • 打赏
  • 举报
回复
Child() {
}
等价于
Child() {
super();
}
classjava 2005-10-31
  • 打赏
  • 举报
回复
自动调用父类构造函数
ianok 2005-10-31
  • 打赏
  • 举报
回复
就是1啊,有什麽問題
晨星 2005-10-31
  • 打赏
  • 举报
回复
你已经在子类构造函数的第一句明确指定调用父类构造函数的int版本,而不是默认版本,那么默认版本将不再会被自动调用了。
yyy 2005-10-31
  • 打赏
  • 举报
回复
你是用super显式调用父类的构造函数

62,614

社区成员

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

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