Java基础-----继承中的初始化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuming226/article/details/85042713
前言

子类构造方法执行前默认先执行父类的无参构造方法。

一个类的初始化过程

成员变量进行初始化
(1)默认初始化。
(2)显示初始化。
(3)构造方法初始化。

案例演示
package duixiang;

class Fu {
	public int num = 10;
	
	public Fu() {
		System.out.println("fu");
	}
}

class Zi extends Fu {
	public int num = 20;
	public Zi() {
		System.out.println("Zi");
	}
	
	public void show() {
		int num = 30;
		System.out.println(num);//30
		System.out.println(this.num);//20
		System.out.println(super.num);
	}
}

public class ExtendsTest {
	public static void main(String[] args) {
		Zi z = new Zi();
		z.show();
	}
}

执行结果如下:
在这里插入图片描述

初始化变量、代码块和构造方法的初始化顺序
package duixiang;

class Test1 {
	Test1(){
		System.out.println("Test1构造方法!");
	}
}

public class DemoTest {
	Test1 test1 = new Test1();
	static {
		System.out.println("static");
	}
	
	{
		System.out.println("普通代码块");
	}
	
	DemoTest() {
		System.out.println("DemoTest构造方法");
	}
	
	public static void main(String[] args) {
		DemoTest demoTest = new DemoTest();
		
	}
}

执行结果如下:
在这里插入图片描述

子父类的初始化(分层初始化)

先进行父类初始化,然后进行子类初始化。

虽然子类中构造方法默认有一个super(),初始化的时候,不是按照那个顺序进行的。而是按照分层初始化进行的,它仅仅表示要先初始化父类数据,再初始化子类数据。

package duixiang;

class DemoX {
	DemoY dy = new DemoY();
	
	DemoX() {
		System.out.println("X");
	}
}

class DemoY {
	DemoY() {
		System.out.println("Y");
	}
}
public class DemoZ extends DemoX{
	DemoY dy = new DemoY();
	DemoZ() {
		System.out.println("Z");
	}
	
	public static void main(String[] args) {
		new DemoZ();
	}
}

执行结果如下:
在这里插入图片描述
对其编译后产生的class文件用反编译软件查看,其代码如下:

// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   DemoZ.java

package duixiang;

import java.io.PrintStream;

// Referenced classes of package duixiang:
//			DemoX, DemoY

public class DemoZ extends DemoX
{

	DemoY dy;

	DemoZ()
	{
		dy = new DemoY();
		System.out.println("Z");
	}

	public static void main(String args[])
	{
		new DemoZ();
	}
}

猜你喜欢

转载自blog.csdn.net/yuming226/article/details/85042713