从Concrete类设置时获取重复字段

时间:2015-01-31 12:24:57

标签: java concreteclass

我需要在扩展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()方法实现。

2 个答案:

答案 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;
    }
}

希望它有所帮助。

谢谢, 保罗