A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 337091921 中级黑马   /  2013-4-27 00:07  /  1806 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 337091921 于 2013-5-11 21:40 编辑

class J_SuperClass{//创建一个类
        int m_data;//成员变量
        J_SuperClass(){//构造方法
                mb_add(1);//调用mb_add方法,里面传1
        }
        public void mb_add(int i){//mbadd方法,可以解释为m_data=m_data+1;
                m_data+=i;//m_data默认值是0.//0=0+6=6
        }
public void mb_print(){//创建mb_print方法
        System.out.println(m_data);//打印m_data方法
}
        
}

class J_SubClass extends J_SuperClass{//创建一个类,继承super类
        J_SubClass(){//构造函数
                mb_add(2);//在方法mb_add(2)传入一个参数2
        }
        public void mb_add(int i){//覆写mb_add函数
                m_data+=i*2;//m_data= m_data+2*2
        }
}

public class J_Test {//创建一个类
        public static void mb_method(J_SuperClass a){//创建一个静态方法,不存在覆盖,里面穿入父类类型的 a引用
                a.mb_add(6);//a引用的方法传入6
                a.mb_print();//a引用的方法
        }
        //第二步,在父类中mb_add方法传入一个6,然后调用打印方法
        
        public static void main(String[] args) {
                mb_method(new J_SubClass());//本类mb_method方法里面创建一个匿名对象
                //可以解释为J_SuperClass a = new J_SubClass();
                //第一步

        }

}

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 我也在等人回答

查看全部评分

1 个回复

倒序浏览
本帖最后由 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的视频, 里面介绍的很详细了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马