【问题标题】:Should you use the superclass constructor to set variables?你应该使用超类构造函数来设置变量吗?
【发布时间】:2015-02-16 13:54:06
【问题描述】:

我不知何故认为这样做是个坏主意。这样做很常见吗?我不确定它的用法,因为我从来没有在实践中看到过它,无论如何作为一个真实的例子。

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

【问题讨论】:

标签: java inheritance constructor superclass


【解决方案1】:

使用超类构造函数是一种标准做法。当可能在超类构造函数中对变量进行一些验证时,它允许代码重用。

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

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

【讨论】:

  • 也许“坏”这个词用错了,但是因为我从来没有在实际使用中见过它,所以我想知道我是否应该真正使用它而不是常规设置。谢谢,这个例子也很清晰和合乎逻辑:)
【解决方案2】:

考虑以下几点:

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 个轮子。

【讨论】:

    【解决方案3】:

    对于继承,这是绝对必要的。这就是为什么具有不同构造器的抽象类迫使您实现所有它们的原因

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 2015-12-18
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多