高人进,一段很晕的代码。

wangzhisheshou 2005-10-13 10:46:59
import java.util.Date;
class Bass{
public Bass(){
m();
}

public void m(){
}
}

public class Sub extends Bass{
private Date date;

public Sub(){
date=new Date();
}


public void m(){
System.out.println(date);
}

public static void main(String[] args){
Sub s=new Sub();
s.m();
}
}
以上代码输出两行,第一行为,null.第一行为时间。
那位高人能解释一下吗?



















...全文
219 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2005-10-14
  • 打赏
  • 举报
回复
用文字来表达就是

要让一个人(某个对象object)干活(就是调用这个object的非静态方法)必须要让他先生出来(构造函数),而要让他生出来,他的父亲必须先于他生出来
yanxiazhiqiu 2005-10-14
  • 打赏
  • 举报
回复
倒!cuo bie zi ,haha! thinking~~
yanxiazhiqiu 2005-10-14
  • 打赏
  • 举报
回复
又是顺序问题,看看thingking in java吧,讲的够细了。
aspirerME 2005-10-14
  • 打赏
  • 举报
回复
up
zgysc 2005-10-14
  • 打赏
  • 举报
回复
子类调用构造函数的时候必然先调用父类的构造函数
Mark_Chen 2005-10-14
  • 打赏
  • 举报
回复
believefym(暮色,miss,迷失,miss。。。)
支持你的答案,正确!!
我顶!!
liwei_0223 2005-10-14
  • 打赏
  • 举报
回复
做思考状晕倒!-_-
leihailin 2005-10-14
  • 打赏
  • 举报
回复
恩,说得很好
zsjin0208 2005-10-14
  • 打赏
  • 举报
回复
更正:子类在初始化构造函数前先默认的调用它的不带参数的构造函数.
为:子类在初始化构造函数前先默认的调用它父类的不带参数的构造函数.
zsjin0208 2005-10-14
  • 打赏
  • 举报
回复
子类在初始化构造函数前先默认的调用它的不带参数的构造函数.
zsjin0208 2005-10-14
  • 打赏
  • 举报
回复
要让一个人(某个对象object)干活(就是调用这个object的非静态方法)必须要让他先生出来(构造函数),而要让他生出来,他的父亲必须先于他生出来
=============================================
说得好!
inexplicable 2005-10-13
  • 打赏
  • 举报
回复
1) parent constructor先于 child constructor 调用
2) 创建的是 Sub实例,所以m是属于sub的行为
3) parent constructor 调用 m的时候 date 没有new 还
arsaluo 2005-10-13
  • 打赏
  • 举报
回复
一楼是对的
schol 2005-10-13
  • 打赏
  • 举报
回复
楼上正解!!

顶!
believefym 2005-10-13
  • 打赏
  • 举报
回复
子类调用构造函数的时候必然先调用父类的构造函数
Sub s=new Sub();调用Bass构造函数->调用m方法,动态绑定,调用Sub的m方法,此时Date还未被构造函数初始化,输出未null
接着调用Sub的构造函数,初始化date,
s.m()输出date

结果就是,第一行null,第二行为时间

62,629

社区成员

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

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