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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-郑玉元 于 2013-3-16 07:16 编辑
  1. class Demo01{
  2.         
  3.         
  4.         public static void main(String[] args){
  5.                 new Zi();
  6.         }

  7. }
  8. class Fu{
  9.         {
  10.         System.out.println("父类构造代码块");
  11.         }
  12.         Fu(){
  13.                
  14.                 show();//父类的构造方法
  15.         }
  16.         
  17.         void show(){
  18.         System.out.println("父类的方法");
  19.         }
  20. }

  21. class Zi extends Fu{

  22.         int num = 8;
  23.         /*
  24.         static{
  25.                 System.out.println("静态代码块 = "+num);
  26.         }
  27.         */
  28.         
  29.         {
  30.                 System.out.println("构造代码块 = " + num);//构造代码块
  31.         }
  32.         
  33.         Zi(){
  34.                 super();
  35.                 System.out.println("子类的构造方法= " + num);//子类的构造方法
  36.         }
  37.         
  38.         void show(){
  39.                 System.out.println("子类方法= " + num);
  40.         }
  41.         
  42. }
  43. 执行之后的结果!!详细过程,以及理由用到的知识!!!


复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

11 个回复

倒序浏览
首先解释的是{..... }和构造是一个性质的作用,而且构造的特点就是按照位置先后执行,毋庸置疑首先输出了:
父类构造代码块
然后是调用子类的show()方法,因为你生成什么对象就调用什么方法 子类的对象就调用子类的  父类的对象就调用父类的,所以输出:
子类方法=0
构造代码块=8     这个不解释,同上
最后是子类的构造方法Zi()

子类的构造方法=8

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
wanggang 发表于 2013-3-15 20:12
首先解释的是{..... }和构造是一个性质的作用,而且构造的特点就是按照位置先后执行,毋庸置疑首先输出了: ...

明白了点!!!
回复 使用道具 举报
明白了,就给分吧{:soso_e120:}
回复 使用道具 举报
wanggang 发表于 2013-3-15 20:36
明白了,就给分吧

我可以给你分么??版主给吧!!!
回复 使用道具 举报
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewthread&tid=40856
回复 使用道具 举报
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewthread&tid=40856
回复 使用道具 举报
{:soso_e127:}白高兴了,加油!
回复 使用道具 举报
刘海浩 发表于 2013-3-15 20:38
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewt ...

好的!!谢谢!!
回复 使用道具 举报
类初始化时构造函数调用顺序:
1 首先加载类,遇到extends字样会停止加载当前类,加载父类,之后再继续加载。
2 当把一个类完全加载后,这个类的静态成员将被先加载。之后进行如下流程:
(1)初始化对象的存储空间为零或null值;
(2)调用父类构造函数;
(3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
(4)调用本身构造函数

楼主的代码,重点在父类加载,加载父类构造函数的时候,调用的了show方法,注意这个时候调用的show方法,是子类重写过的。所以输出是“子类方法=0”

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
祁振朋 发表于 2013-3-15 20:52
类初始化时构造函数调用顺序:
1 首先加载类,遇到extends字样会停止加载当前类,加载父类,之后再继续加 ...

很好!谢谢!!!
回复 使用道具 举报
若还有问题,继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马