在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();
}
}