0

我需要在每个ConcreteClass扩展中定义常量值AbstractClass。由于某种原因,对象最终具有重复的字段,一组字段等于零,下一组具有正确的值。

一些接口

public interface SomeInterface{
    double calculate();
} 

抽象类

public abstract class AbstractClass implements SomeInterface{
       double x, y;

       public double calculate(){
            return x*y;
       }
    }

具体类

public class ConcreteClass extends AbstractClass{

    final double x = 1.1;
    public setY(double y){
        this.y = y;
    }

} 

我需要我的具体类来存储常量值,同时从抽象类final double x = 1.1;继承方法实现。calculate()

4

2 回答 2

1

你已经声明了 x 两次,所以你得到了两个 x 变量;一个掩盖另一个。它正在做你告诉它的事情。

要让具体类设置一个值,请将它的设置放入 ConcreteClass 的一个(或所有)构造函数中。不要再声明了。

我不知道您可以将其声明为 final 并仍然在子类中对其进行更改。

于 2015-01-31T12:28:53.403 回答
1

你也许可以做这样的事情来解决这个问题——即使你不能覆盖 java 中的实例变量。

如果您只想让具体类有一个常量变量,而基础抽象类将其用于计算方法 - 您可以尝试这样的事情..

public abstract class AbstractClass implements SomeInterface{

       double x, y;

    public void setX(double x){
        this.x = x;
    }
    public double calculate(){
        return x*y;
   }
}

然后在具体类中,您仍然可以拥有最终变量并将其传递给抽象类的设置器。

public class TestAbstractVariable extends TestAbstract {
    {
        final double x = 1.1;
        setX(x);
    }

    public void setY(double y){
        this.y = y;
    }
}

希望能帮助到你。

谢谢,保罗

于 2015-01-31T13:38:48.260 回答