答案是肯定的。
在抽象类中定义构造函数,在语法上并不会报错,那么说明构造函数是可以存在的。
既然抽象类并不能实例化,那抽象类中的构造函数存在的意义是什么?
抽象类必须被子类继承来实现。
子类在调用父类时 无论自己有没有构造方法都会先去执行父类无参的函数。哪怕父类是抽象类。虽然抽象类不能被实例化,但是可以在构造方法中初始化一些参数;也可以在子类中调用父类的构造方法。
阅读如下代码:
父类:
public abstract class Demo1 {
String name;
String sex;
public Demo1() {
System.out.println("执行父类的无参构造函数");
}
public Demo1(String name,String sex){
this.name = name;
this.sex = sex;
System.out.println("执行父类的有参构造函数");
}
public void print() {
System.out.println("name"+this.name+",sex"+this.sex);
}
}
子类:
public class Demo2 extends Demo1 {
public Demo2(){
System.out.println("执行子类的构造函数");
}
public Demo2(String name, String sex) {
super(name, sex);
System.out.println("执行子类的有参构造函数");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Demo2 demo2 = new Demo2();
Demo2 dm2 = new Demo2("张三","男");
dm2.print();
}
}
输出的结果为: