继承最终的抽象 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
}
}
我有一个 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
}
}