java吧 关注:1,214,523贴子:12,660,471
  • 11回复贴,共1

求大神解惑

只看楼主收藏回复

求大神解惑


来自Android客户端1楼2017-08-21 16:24回复
    你猜


    IP属地:日本2楼2017-08-21 16:25
    回复
      .....


      4楼2017-08-21 16:34
      回复
        子类Dervied继承父类Base 所以new子类 会在子类所有方法前有super()方法,调用父类的默认构造方法Base(),父类Base()里面又调用了父类本身的display();这时i还没有赋值,所以等于默认值0咯


        IP属地:浙江6楼2017-08-21 16:40
        收起回复
          debug一下


          来自Android客户端8楼2017-08-21 22:23
          回复
            6楼正解,走的无惨构造,此时还没有赋值呢


            IP属地:浙江来自iPhone客户端9楼2017-08-21 23:44
            回复
              这部分是java虚拟机的知识 可以查查类的加载顺序 构造顺序


              IP属地:山东来自Android客户端10楼2017-08-22 01:00
              回复
                子类的构造函数执行时候会默认优先执行一个父类的空参构造,此时子类重写了这个空参构造所调用的方法,就会找到子类重写的方法执行,但是执行重写方法时候子类的i还没有入栈,所以,默认成员变量的值为0。


                IP属地:辽宁来自Android客户端12楼2017-08-22 09:37
                回复
                  所以值为0。因为成员没初始化之前都有一个默认值。


                  IP属地:辽宁来自Android客户端13楼2017-08-22 09:37
                  回复