Java教程

【java】继承、非继承关系下对象的初始化顺序

本文主要是介绍【java】继承、非继承关系下对象的初始化顺序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 1.无继承关系下,对象初始化顺序
    • 2.有继承关系下,对象的初始化顺序

1.无继承关系下,对象初始化顺序

初始化顺序:
static属性/static代码块属性/代码块构造方法
无继承关系下 对象初始化顺序案例在这里插入代码片

2.有继承关系下,对象的初始化顺序

有继承关系,初始化顺序:
1.父类static代码块——子类static代码块
2.父类代码块——父类有参(无参)构造方法——子类代码块——子类有参(无参)构造方法(先父后子)

Car.java 父类

/**
 * 继承关系下代码的初始化顺序
 * 1.优先初始化static代码块(先父后子)
 * 2.先父后子 父类初始化(父类代码块、父类构造方法(有参或者无参))——子类初始化(子类代码块、子类构造方法(有参或者无参))
 *  !!继承关系下的子类有参构造方法需要写super(x);
 *  !!继承关系下的子类无参构造方法不需要写super(x);创建子类对象(调用子类无参构造器时)会隐式调用父类无参构造方法,即super();
 */
@Setter@Getter
public class Car {
	private String car;
	private String brand;
	
	static {
		System.out.println("父类static代码块");
	}

	{
		System.out.println("父类代码块");
	}
		
	public Car(int x) {
		System.out.println("父类有参构造方法");
	}

	public Car() {
		System.out.println("父类无参构造方法");
	}
}

SuperCar.java 子类

public class SuperCar extends Car {
 
 static {
		System.out.println("子类static代码块");
	}

	{
		System.out.println("子类代码块");
	}
	
	public SuperCar(int x) {
		super(x);
		System.out.println("子类有参构造方法");
	}

	public SuperCar() {
	    System.out.println("子类无参构造方法");
		// TODO Auto-generated constructor stub
	}
}

cartest.java 测试代码

class cartest {
	@Test
	void test() {
		Car c= new SuperCar(3);
		Car ca=new SuperCar();
		
		System.out.println(c);
		System.out.println(ca);		
	}
}

执行结果

在这里插入图片描述

这篇关于【java】继承、非继承关系下对象的初始化顺序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!