我有一个父类(super class)和两个扩展它的子类。我想初始化一个名为 radius 的变量,它可以在子类 A 中自由设置,但对于子类 B 总是相同的。我可以在每次创建对象 B 时初始化该变量,但我想知道是否可以使子类 B 中的变量 final 和 static,同时仍然能够在我的父类(super class)中实现 getter。我可能会实现更多的子类,它们的半径要么是最终的,要么是可变的。如果不是,我想知道解决我的问题的最优雅的解决方案是什么。这是一些示例代码,可以运行,但不是很好。
abstract class SuperClass {
public double getRadius() {
return this.radius;
}
protected double radius;
}
class A extends SuperClass{
public void setRadius(double radius) { // Would like to put this setter in SuperClass for future subclasses.
this.radius = radius;
}
}
class B extends SuperClass{
public B() {
radius = 0.2; //Want to make this static and final only for this subclass.
}
}
最佳答案
Making a variable final and static in one subclass, while keeping it variable in others in Java
从技术上讲,你无法做到这一点。
字段要么是静态字段,要么是实例字段,不能同时是两者。
或者,在您想要提供不同值的 B
类中重写 getRadius()
:
@Override
public double getRadius() {
return 0.2;
}
为了使这个常量得到尊重,您还应该重写这个 B
类中的 setter:
@Override
public void setRadius(double radius) {
throw new UnsupportedOperationException();
}
关于java - 在 Java 中,在一个子类中将变量设置为 Final 和 static,同时在其他子类中保持变量不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49384171/