java吧 关注:1,271,998贴子:12,780,493
  • 10回复贴,共1

求解答,简单的问题

只看楼主收藏回复


这里不是只调用了a跟b吗。为什么还会输出前面两行的字??求解释,谢谢


IP属地:云南1楼2013-07-24 23:08回复
    因为输出那两行字的方法被定义在构造器里面啊, 你新建调用的就是这个构造器, 而子类构造器又调用了父类的构造器, 也就是两个构造器都被调用了, 那么两个方法也都被调用了


    IP属地:山东2楼2013-07-24 23:11
    收起回复
      2025-08-01 04:07:09
      广告
      不感兴趣
      开通SVIP免广告
      你调用了这个构造器,按照代码的运行顺序,会将构造器里的方法一并运行,所以会出现这两行字,然后再打印出a和b的值。


      IP属地:四川3楼2013-07-24 23:41
      回复
        对于没有参数的构造器,你不写super(),在子类生成过程中也会先得到调用!除非你用super(参数……)指定调用父类带参构造器,这样父类不带参的构造方法就不会被调用!super(参数……)是方便我们调用父类带特定参数的构造器,应传入相应参数!


        来自Android客户端4楼2013-07-24 23:51
        回复
          很显然的问题,两个构造器都被调用了,代码按照顺序执行,首先打印 这是父构造器,再打印 这是子构造器,最后打印a的值,b的值


          来自手机贴吧5楼2013-07-24 23:54
          收起回复
            首先你得理解构造器,就是一个方法,通过调用它来创建一个对象,也就是说你创建一个对象,那么对应的构造方法就会被执行.从main方法开始,new men()调用的就是men()这个构造方法,那么该方法内的代码就会被执行:对b赋值,然后输出文字,就是你看到的第二行.
            但是在这之前你还注释掉一个super(),这句调用的是父类Person的构造器,对应的就是Person()方法,内部代码也会被执行:对a赋值并输出文字.这里即使你注释掉了这行代码其实也是存在的,一个固定的语法现象,子类会首先调用父类的构造器.如果父类有多个构造器的话可以指定,但你没有指定那么调用的就是父类默认构造器,就是Person()方法.
            因为调用父类构造器在对b赋值并输出文字之前, 所以整个流程就是: 子类构造器men()调用父类构造器Person(), 在Person()中对a赋值并输出文字; 然后在子类men()中对b赋值并输出文字. 这时前两行文字就出来了. 再往下执行System.out.println()得到m.a和m.b的值


            IP属地:山东6楼2013-07-25 00:10
            回复


              IP属地:山东8楼2013-07-25 09:05
              回复
                继承,会调用构造方法。而且是先调用父类的构造方法


                IP属地:湖南9楼2013-07-25 09:46
                回复