本帖最后由 breeze 于 2013-4-28 20:23 编辑
这段代码的执行分析
1. public static void main(String[] args) {
mb_method(new J_SubClass());
}
2. public static void mb_method(J_SuperClass a){
a.mb_add(6);
a.mb_print();
}
3. 第一步传入一个 new J_subClass匿名对象, 执行了该类的构造方法
J_SubClass(){
super(); //这里是先会执行父类中的构造方法
mb_add(2);
}
public void mb_add(int i){//覆写mb_add函数
m_data+=i*2;//m_data= m_data+2*2
}
这个时候m_data还是0, 当执行super()的时候, 因为是子类对象重写的父类的方法是非静态方法, 所以这时候父类构造方法中的add(1) 调用的是子类的(参考多态, 有细节), 这时候m_data变成了2, 紧接着子类构造方法中执行了第二句add(2), 还是子类自己的方法, 这时候m_data变成了6(m_data += 2 * 2), 这时候第2步中子类对象又调用了add(6)方法, 这时候的m_data就成了18(m_data += 6 * 2), 所以打印结果是18
关于多线程建议你看看javase的视频, 里面介绍的很详细了 |