我需要在扩展ConcreteClass
的每个AbstractClass
中定义常量值。由于某种原因,对象最终会有重复的字段,一组字段等于零,下一个字段具有正确的值。
SomeInterface
public interface SomeInterface{
double calculate();
}
AbstractClass
public abstract class AbstractClass implements SomeInterface{
double x, y;
public double calculate(){
return x*y;
}
}
ConcreteClass
public class ConcreteClass extends AbstractClass{
final double x = 1.1;
public setY(double y){
this.y = y;
}
}
我需要我的具体类来存储常量值final double x = 1.1;
,同时从抽象类继承calculate()
方法实现。
答案 0 :(得分:1)
你已经声明了两次x,所以你得到两个x变量;一个掩盖另一个。它正在做你告诉它的事情。
要使具体类设置一个值,请将其设置放在ConcreteClass的(或所有)构造函数中。不要再声明。
我不知道你可以将它声明为final并仍然在子类中改变它的方式。
答案 1 :(得分:1)
即使你无法在java中覆盖实例变量,你也许可以做这样的事情 -
如果你想要做的就是让Concrete类有一个常量变量,而基本抽象类使用它来计算方法 - 你可以试试这样的东西..
public abstract class AbstractClass implements SomeInterface{
double x, y;
public void setX(double x){
this.x = x;
}
public double calculate(){
return x*y;
}
}
然后在具体类中,您仍然可以拥有最终变量并将其传递给抽象类的setter。
public class TestAbstractVariable extends TestAbstract {
{
final double x = 1.1;
setX(x);
}
public void setY(double y){
this.y = y;
}
}
希望它有所帮助。
谢谢, 保罗