java中父类和子类构造函数的调用关系

在Java中,如果一个类没有定义构造函数,编译器默认会为该类插入一个默认的无参构造函数。 如果构造函数是在父类中定义的,在这种情况下,Super(String s),编译器不会插入默认的无参数构造函数。子类的构造函数(带参或无参)将调用无父类的无参构造函数。要解决这个问题,只需要添加一个Super() 构造函数给Super类

public Super(){
    System.out.println("Super");

或者删除自定义的父类构造函数,
将 Super(value) 添加到子构造函数。

参考链接:https://blog.csdn.net/czzjphtj/article/details/79863644

package com;
/**
 * 子类
 * @Description: TODO
 * @author whc
 * @date 2018年11月10日 下午12:06:40
 */
public class Child extends Person{
	private String className;//班级名称
	private String id;//学号
	
	public Child(String className, String id) {
		//super();
		System.out.println("现在在调用child的有参数构造方法……");
		this.className = className;
		this.id = id;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
}
package com;
/**
 * 演示继承时的构造函数调用关系,父类
 * @Description: TODO
 * @author whc
 * @date 2018年11月10日 下午12:05:46
 */
public class Person {
	private String name;
	private int age;
	
	public Person() {
		System.out.println("现在在调用person的无参构造方法……");
	}
	
	/*public Person(String name, int age) {
		System.out.println("现在在调用Person的有参构造方法……");
		this.name = name;
		this.age = age;
	}*/
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
`

Java中静态代码块、构造方法、代码块、父类与子类之间执行顺序
https://blog.csdn.net/J080624/article/details/52609341

package com;

public class TestPerson {

	int id;
	String name;
	/**
	 * 这是静态代码块
	 */
	static {
		System.out.println("这是静态代码块!");
	}
	
	/**
	 * 构造函数代码块,在new对象的时候执行
	 */
	{
		System.out.println("这是构造函数执行!");
		this.id = 5;
		this.name = "测试";
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Child("一班","123434");
		
		new TestPerson();
	}

}

猜你喜欢

转载自blog.csdn.net/gaotanpan3666/article/details/83928398