假设我们有一个抽象类A
,我们想强制所有子类有一个特定的字段。这在 Java 中是不可能的,因为我们不能定义抽象字段。
解决方法 1:强制子类实现提供所需值的方法。
abstract class A {
abstract int getA();
}
缺点:每个子类都必须为我们想要的每个抽象字段实现一个方法。这可能导致许多方法实现。
优点:我们可以使用getA
抽象类中的方法并在其中实现方法,A
而无需在每个子类中实现它们。但是方法后面的值不能被抽象类覆盖。
解决方法 2:通过强制子类给抽象类一个值来模拟抽象字段。
abstract class A {
int a;
public A(int a) {
this.a = a;
}
}
缺点:当我们有多个字段(> 10)时,超级构造函数调用看起来有点丑陋和混乱。
优点:我们可以a
在抽象类中使用该字段并在其中实现方法,A
而无需在每个子类中实现它们。另外,该值a
可以被抽象类覆盖。
问题:哪种解决方法是达到目标的常用方法?也许有比上述更好的?