美文网首页
子类 super()传参的坑

子类 super()传参的坑

作者: Helloword_Cc | 来源:发表于2020-05-23 15:38 被阅读0次

    父类

    public class BaseServiceImpl<T> {
    
        public   BaseDaoI baseDaoI;
    
        public  BaseServiceImpl(BaseDaoI baseDaoI){
            this.baseDaoI =baseDaoI;
        }
    

    子类去继承BaseServiceImpl 需要初始化baseDaoI
    子类:

    image.png

    如图向父类传递baseDaoI对象,但一定需要添加静态修饰。
    由于jvm类加载顺序
    1)父类的变量,父类的构造函数。
    2)子类的变量,子类的构造函数。

    所以父类初始化baseDaoI的时候,子类还没有baseDaoI还没初始化,怎么能传递baseDaoI到父类呢。

    而添加了static之后 ,子类的<静态>变量是先于父类的变量初始化的。所以传入父类的构造方法则没问题。

    去掉static修饰,编译报错。

    image.png

    最后是加载顺序表

    父类静态变量初始化
    父类的静态初始化块
    子类初始化静态变量
    子类的静态初始化块
    父类非静态变量初始化
    父类的非静态初始化块
    父类构造函数 start
    父类调用draw方法 null
    父类构造函数 end
    子类初始化非静态变量
    子类初始化私有变量
    子类的非静态初始化块
    子类构造函数 start
    子类调用draw方法子类初始化私有变量
    子类构造函数 end

    相关文章

      网友评论

          本文标题:子类 super()传参的坑

          本文链接:https://www.haomeiwen.com/subject/lwxlahtx.html