构造函数是对象的基本,没有构造函数就没有对象。
如果在父类中(这里就是你的抽象类)中显示的写了有参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数
public abstract class Person { int a = 0;
//如果不写Person(),java会默认加上一个不带参数的构造函数,即Person(){};
Person() { a = 10;
System.out.println("class is " + Person.class);
} Person(int x) { a = x; } }
子类
public class Student extends Person { int b = 0;
Student() {
//super();//可不写,默认调用Person(); b = 100;
System.out.println("class is " + Student.class); } Student(int x) {
//super(x);此处若不显示调用父类的带参构造函数,则默认调用 无参 构造函数Person();
b = 200;
} }
测试类
public class abTest { public static void main(String[] args) { Student s = new Student(); System.out.println(s.a); Student s1 = new Student(1000); System.out.println(s1.a); } }
输出
class is class AbstractClz.Ab_1.Person class is class AbstractClz.Ab_1.Student 10 class is class AbstractClz.Ab_1.Person 10
结论:
无参:调用子类的构造函数前,先执行父类的构造函数。
带参:带参构造函数需显示调用super(x),才能调用父类的Person(int x),否则调用默认Person();