栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 继承问题 :输出YXYZ

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 继承问题 :输出YXYZ

class X{
    public Y y = new Y();

    public X(){
        System.out.println("X");
    }
}
class Y{
    public Y(){
        System.out.println("Y");
    }
}
public class Z extends X{
    public Y y = new Y();

    public Z(){
        System.out.println("Z");
    }

    public static void main(String[] args) {
        new Z();
    }
}
------------------------------------------
执行结果:
Y
X
Y
Z

知识补充:

  •  new Z()这种形式,表示new出一个对象的地址没地方保存,待这行语句执行完毕之后,就立刻会被垃圾回收机制判定为垃圾随之被回收;
  • 创建子类实例的时候,会先构造父类的实例(调用父类的构造方法);
  • 初始化顺序:先执行就地初始化,再执行代码块,最后执行构造方法;
  • 代码块执行顺序:static修饰的代码块(类加载时执行)执行始终在普通代码块(创建实例时)之前,类加载只执行一次。

过程分析:

  • new Z()的时候,会先构造父类的实例,进入X中执行
  • 构造X实例的时候,先就地初始化,再调用构造方法,于是进入Y执行
  • 进入Y,执行Y的构造方法,打印了Y
  • 执行完Y后,出来执行X的构造方法,打印了X
  • 此时父类X已经准备就绪,开始执行子类Z的初始化
  • 对于Z来说也是先执行就地初始化,再调用构造方法
  • 就地初始化时进入Y执行,只调用了构造方法,打印了Y
  • 接下来执行自己的构造方法,打印了Z
  • 故结果为输出YXYZ
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号