weixin_45912201
weixin_45912201
采纳率100%
2021-04-08 11:18

如图 以下输出结果为什么是122314 不是12234

已结题

 

  • 点赞
  • 收藏
  • 复制链接分享

8条回答

  • weixin_47439387 小亮点科技 8天前

    如果没有显式的调用父类的构造方法,则是默认调用父类无参数的构造方法。

    所以B b2 = new B(4);

     这里因为B(inta)中没的调用父类的构造方法,所以就调用了A()输出了你意料之外的1

    即122314

    点赞 评论 复制链接分享
  • technologist_15 技术专家团 - 三岁丫 8天前
    class A {
      public A (int a) {
    
      }
    }
    
    class B extends A{
    
      public B(int a) {
        super(a);
        System.out.println();
      }
       
      // 下面这个方法会报错,因为找不到 A 的无参构造方法,需要你手动声明一个父类的构造方法
      public B() {
        System.out.println();
      }
    }

    可以通过上面的代码进行证明

    点赞 1 评论 复制链接分享
  • software7503 技术专家团-赖老师(软件之家) 8天前

    注意java的继承,必须先实例化父类,也就是说会先调用父类的构造函数,再调用自己的构造函数,最后一次创建B对象时,调用了带参数的构造函数,没有显式调用A类的构造函数时,系统会默认先调用A类的默认构造函数。

    点赞 评论 复制链接分享
  • technologist_12 技术专家团 - 九宝老师 8天前

    new A()   ----1

    newA(3) ----2

    newB()   ----23

    newB(4)  ----14

     

    new B()先调用A(int)

    newB(4)先调用A()

    点赞 评论 复制链接分享
  • technologist_15 技术专家团 - 三岁丫 8天前
    B(int a) {
        super();// 这行你是看不见的,只要不显示声明,其实就会默认调用父类的无参构造方法
        System.out.print(4);
    }
    点赞 评论 复制链接分享
  • technologist_12 技术专家团 - 九宝老师 8天前

    实现B的实例,需要先实现A实例,之后调用B的构造

    点赞 评论 复制链接分享
  • fei_thefirst 佛祖保佑永不宕机 8天前

    这是一个Java的基础,前面为什么会输出1223你应该是知道为什么的,后面为什么输出14而不是4,那是因为B继承了A,你用B的构造函数时,会默认调用一次A的无参构造函数,虽然你代码里没在B的有参构造里写super(),但是它还是会调用,并且你记住,super()必须在它子类的构造函数的第一行调用,如果你没显示的调用,那它还是会在你System.out.println前面调用,只是你在代码里看不见。而你显时的调用时,不在第一行调用就会出现错误。

    点赞 2 评论 复制链接分享
  • weixin_47439387 小亮点科技 8天前

    感谢采纳,欢迎关注下我的博客,我持续发布技术方章。感觉可以的话欢迎点赞

    点赞 评论 复制链接分享