Joh*_*ood 5 java abstract-class field
假设,我们有一个抽象类A,我们想强制所有子类都有一个特定的字段.这在Java中是不可能的,因为我们无法定义抽象字段.
解决方法1:强制子类实现提供所需值的方法.
abstract class A {
abstract int getA();
}
Run Code Online (Sandbox Code Playgroud)
缺点:每个子类都必须为我们想要的每个抽象字段实现一个方法.这可以导致许多方法实现.
优点:我们可以getA在抽象类中使用该方法,并使用它实现方法,A而无需在每个子类中实现它们.但是抽象类不能覆盖方法背后的价值.
解决方法2:通过强制子类为抽象类赋值来模拟抽象字段.
abstract class A {
int a;
public A(int a) {
this.a = a;
}
}
Run Code Online (Sandbox Code Playgroud)
缺点:当我们有多个字段(> 10)时,超级构造函数调用看起来有点难看和混乱.
优点:我们可以a在抽象类中使用该字段并使用它实现方法,A而无需在每个子类中实现它们.此外,该值a可以被抽象类覆盖.
问题:实现目标的常用方法是哪种解决方法?也许比上面的更好?
我认为 opt.1 是迄今为止最干净的。一些 getter 和 setter 并不是什么大问题,而且我怀疑许多用例不仅仅只有一些抽象的“字段”。
关于 opt.2,您忘记了构造函数不是继承的,因此需要以考虑的方式实现所有子类构造函数a。
| 归档时间: |
|
| 查看次数: |
3420 次 |
| 最近记录: |