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

3

我认为这样做不是个好主意。这种做法常见吗?我不确定它的使用方式,因为我从未在实践中看到过这种方法,至少没有一个真正的世界范例。

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

实际上,我后来发现了这个问题和答案,可能对一些人有帮助:https://dev59.com/IG855IYBdhLWcg3w5IrZ - Bono
3个回答

7

在使用it技术时,使用超类构造函数是一种标准做法。这允许重用代码,当某些变量的验证可能已经在超类构造函数中完成时。

例如,请查看来自Apache Commons Collection的代码。

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


也许“不好”这个词用得不太妥当,但由于我以前从未真正看到过它的使用,所以我想知道我是否应该真的使用它来代替常规设置。谢谢,这个例子清晰且逻辑性强 :) - Bono

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,但只有汽车有四个轮子。


0

对于继承来说,这是绝对必要的。这就是为什么具有不同构造函数的抽象类会强制你实现它们所有的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接