java抽象类的构造方法有什么用?

抽象类又不能被实例化,他的构造方法有用么?
如果被子类使用,那么构造出来的是子类还是父类呢?

img


我想通过父类来规范子类的构造方法,确保某个变量的必定有值。
但是如果通过这个构造方法构造,那么构造出来的是子类还是父类呢?
还是直接报错?

package test;

public abstract class AbstractA {

    private Integer id;

    public AbstractA(Integer id) {
        this.id = id;
        System.out.println("抽象类构造方法");
    }
}

class BBC extends AbstractA {

    public BBC(Integer id) {
        super(id);
        System.out.println("具体类构造方法");
    }

    public static void main(String[] args) {
        new BBC(1);
    }
}

img

构造出来的是子类。
抽象类又不能被实例化,他的构造方法会先于具体类执行。
你的思路是没错的

抽象类的构造方法可以被子类调用,为子类初始化一些属性,抽象类的构造方法是无法直接构造实例的,只能在子类的构造方法里调用,那么构造出来的自然是子类

依赖倒置原则:依赖抽象类而不依赖子类。父类的引用指向子类的对象,具体的方法写在此类子类中。

public abstract class Speedservice{
// 抽象方法,不实现
abstract void speed();
}
class ChacheSpeedService extends Speedservice {
// 子类实现抽象方法
@Override
void speed() {
System.out.println("--------ChacheSpeedService-----------");
}
}
class Aaaa{
//注入抽象类
Speedservice speedservice;

public Speedservice getSpeedservice() {
    return speedservice;
}

public void setSpeedservice(Speedservice speedservice) {
    this.speedservice = speedservice;
}
//测试方法
void cs(){
    //调用抽象方法,具体的实现由设置的子类实现
    this.speedservice.speed();
}

public static void main(String[] args) {
    Speedservice chacheSpeedService = new ChacheSpeedService();
    Aaaa aaaa = new Aaaa();
    aaaa.setSpeedservice(chacheSpeedService);
    aaaa.cs();
}

}

希望对你有帮助!