JAVA子类继承父类后new子类对象的过程

在这里插入图片描述
这是看到的一道笔试题目,当时在思考为什么会出现这个,于是找到了一个子类继承父类后new子类对象的代码

父类

public class JVMBase {
    public static String staticName="父类静态变量";
    public String name="父类非静态变量";
    static{
        System.out.println(staticName);
        System.out.println("父类静态代码块");
    }
    public static void baseStaticMethod(){
        //方法只有被调用才会被执行
        System.out.println("父类静态方法");
    }
    {
        System.out.println(name);
        System.out.println("父类匿名代码块");
    }
    public JVMBase(){
        System.out.println("父类无参构造函数");
    }
}

子类

public class JVMSub extends JVMBase{
    public static String subStaticName="子类静态变量";
    public String subName="子类非静态变量";
    static{
        System.out.println(subStaticName);
        System.out.println("子类静态代码块");
    }
    public static void subStaticMethod(){
        System.out.println("子类静态方法");
    }
    {
        System.out.println(subName);
        System.out.println("子类匿名代码块");
    }
    public JVMSub(){
    	//super(); 默认执行父类的无参构造
        System.out.println("子类无参构造函数");
    }
    public static void main(String[] args) {
        JVMSub sub=new JVMSub();
    }
}

运行结果:
父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类非静态变量
父类匿名代码块
父类无参构造函数
子类非静态变量
子类匿名代码块
子类无参构造函数

就是先创建父类 – 再子类,记住肯定是先把父类创建好,再创建子类,这是一个大顺序,

至于单个类中的执行顺序就需要大家花点脑子记一下,先静态-- 后非静态,ok,有了这个概念就不会搞错执行顺序了。

总结:

    父类静态 -- 子类静态(静态代码块只执行一次)

    父类非静态 -- 父类构造 (子类无参构造写不写super() ,默认都走父类无参构造。子类构造写super(有参) ,走父类的有参构造)

    子类非静态 -- 子类构造 (创建子类对象时无参走无参构造,有参走有参构造)

下面这个讲的更详细点https://www.cnblogs.com/mindOpen/p/13020119.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值