继承最终的抽象 Class 属性

Inheriting Abstract Class Attributes that are final

我有一个 superclass 是抽象的,里面有以下属性和构造函数。

public abstract class Equipment {

  public final String serialNumber;

  public final String brand;

  public final String model;

  public final float equipmentPrice;

  public final Integer equipmentStatus;

  public float transactionPrice;

  
  public Equipment(String serialNumber, String brand, String model, float equipmentPrice, Integer equipmentStatus, float transactionPrice) {
  }

}

Child class:

public class Treadmill extends Equipment {

  public double maxSpeed;

  public Treadmill(Integer equipmentStatus, float transactionPrice, double maxSpeed) {
  }

}

问题:在 child class 中,我是否需要包含来自 parent [=29] 的最终属性=]如下,还是应该和上面childclass中的构造一样?或者,尽管大多数 parent 属性是最终的,但 child 构造函数是否应该同时包含 parent 和 child 属性?

public Treadmill(String serialNumber, String brand, String model, float equipmentPrice, Integer equipmentStatus, float transactionPrice, double maxSpeed) {
  }

Final 意味着它们无法更改。如果是这样的话,我怎么能把它应用到每个 child class 因为属性对于所有不同的 child classes 都是通用的?

谢谢!

虽然您的所有子 class 都有相同的父 class,但这并不意味着子 class 的实例与任何其他实例共享其任何成员字段对象。

如果我们有:

class P {
  final int x;
  P(int x) {
    this.x = x;
  }
}

class A extends P {
  A(int x) {
    super(x);
  }
}

class B extends P {
  B(int x) {
    super(x);
  }
}

然后 A 和 B 的每个实例都有自己的字段 x 并且每个实例都可以将其设置为不同的值。

你可以说:

  ...
  A a = new A(1);
  A aa = new A(2);
  B b = new B(3);
  // and also
  P p = new P(4);
  ...

并且每个对象的 x 实例都有不同的值。

关于我评论中您“在子构造函数中不需要这些参数”的部分:子类可能始终对该变量使用相同的值,在这种情况下它不需要它被通过了。例如

abstract class GroundVehicle {
  public final int wheelCount;
  protected GroundVehicle(int wheels) {
     wheelCount = wheels;
  }
}
class Car {
  public Car() { // no need for a parameter,
    super(4);    // we always have 4 wheels
  }
}
class Motorbike() {
   public Motorbike() {
     super(2);  // we do need to pass something though
   }
}