zoukankan      html  css  js  c++  java
  • java继承时,实例化子类,是否会默认调用父类构造方法

    B继承A
    B x = new B();//会不会调用A的构造函数?

    在 Java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句 中进行调用。

            究其原因,想必是 Java 语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。

            也因此,当一个类的构造方法是 private 时,它是不可被 extends 的,因为子类构造方法难以调用到这个父类的构造方法。

    会调用B的无参构造方法,需要强调的是构造方法是不能被继承的,但可以用super访问。

    一个类继承一个父类时,当实例化子类的时候,子类的初始化顺序是这样的:

         1、如果子类中有字段,则先初始化子类的字段。      2、初始化基类,基类如果存在字段,则先初始化字段,再执行构造方法。      3、执行子类的构造方法。

    说白了就是: 先子类字段初始化 然后父类字段初始化 再执行父类构造函数 最后执行子类构造函数

  • 相关阅读:
    深度神经网络的优化算法
    Python 正则表达式
    《java面试十八式》第一式 --冈本零点零一
    《java面试十八式》--引子
    Redis第二讲【Redis基本命令和五大数据结构】
    redis第一讲【redis的描述,linux和docker下的安装使用】
    springboot中的pom文件是如何管理依赖的
    详谈springboot启动类的@SpringBootApplication注解
    工具类中注入service和dao
    windows下安装ssdb
  • 原文地址:https://www.cnblogs.com/yaowen/p/2987132.html
Copyright © 2011-2022 走看看