你应该使用超类构造函数来设置变量吗?

时间:2014-12-17 21:45:00

标签: java inheritance constructor superclass

我不知何故认为这样做是个坏主意。这样做通常很常见吗?我不确定它的用法,因为我在实践中从未见过它,无论如何都是一个现实世界的例子。

public abstract class Car{
    protected int speed;

    public Car(int speed){
        this.speed = speed;
    }
}

public class Ambulance extends Car{
    public Ambulance(int speed){
        super(speed);
    }
}

3 个答案:

答案 0 :(得分:7)

使用超类构造函数是标准练习。当在超类构造函数中对变量进行某些验证时,它允许代码重用。

例如,检查来自Apache Commons Collection的this代码。

使用时,super(..)必须是子类构造函数中的第一个语句。

答案 1 :(得分:1)

请考虑以下事项:

public abstract class Vehicle {
    protected int numWheels;
    protected int speed;

    public Vehicle() {
        this.speed = 0;
    }
}

public class Car extends Vehicle {
     public Car() {
         super();
         this.numWheels = 4;
     }
}

所有车辆都有速度,默认为0,但只有车有4个车轮。

答案 2 :(得分:0)

对于遗产而言,它是绝对必要的。这就是为什么具有不同构造函数的抽象类迫使您实现所有这些

的原因