从混凝土设置时获取重复字段 class
Getting duplicate fields when setting from Concrete class
我需要在扩展 AbstractClass
的每个 ConcreteClass
中定义常量值。由于某种原因,对象最终具有重复字段,一组字段等于零,下一组具有正确的值。
SomeInterface
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;
}
}
我需要我的具体 class 来存储常量值 final double x = 1.1;
,同时从抽象 class.
继承 calculate()
方法实现
你声明了两次x,所以你得到了两个x变量;一个掩盖另一个。它正在按照您的吩咐去做。
要让具体 class 设置一个值,请将它的设置放在 ConcreteClass 的一个(或所有)构造函数中。不要再声明了。
我不知道有什么方法可以将其声明为最终的并仍然在子class中更改它。
你可以做这样的事情来绕过 - 即使你不能覆盖 java 中的实例变量。
如果您只想让具体 class 有一个常量变量,并且基础抽象 class 将其用于计算方法 - 您可以尝试这样的事情..
public abstract class AbstractClass implements SomeInterface{
double x, y;
public void setX(double x){
this.x = x;
}
public double calculate(){
return x*y;
}
}
然后在具体 class 中,您仍然可以拥有最终变量并将其传递给摘要 class 的 setter。
public class TestAbstractVariable extends TestAbstract {
{
final double x = 1.1;
setX(x);
}
public void setY(double y){
this.y = y;
}
}
希望对您有所帮助。
谢谢,
保罗
我需要在扩展 AbstractClass
的每个 ConcreteClass
中定义常量值。由于某种原因,对象最终具有重复字段,一组字段等于零,下一组具有正确的值。
SomeInterface
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;
}
}
我需要我的具体 class 来存储常量值 final double x = 1.1;
,同时从抽象 class.
calculate()
方法实现
你声明了两次x,所以你得到了两个x变量;一个掩盖另一个。它正在按照您的吩咐去做。
要让具体 class 设置一个值,请将它的设置放在 ConcreteClass 的一个(或所有)构造函数中。不要再声明了。
我不知道有什么方法可以将其声明为最终的并仍然在子class中更改它。
你可以做这样的事情来绕过 - 即使你不能覆盖 java 中的实例变量。
如果您只想让具体 class 有一个常量变量,并且基础抽象 class 将其用于计算方法 - 您可以尝试这样的事情..
public abstract class AbstractClass implements SomeInterface{
double x, y;
public void setX(double x){
this.x = x;
}
public double calculate(){
return x*y;
}
}
然后在具体 class 中,您仍然可以拥有最终变量并将其传递给摘要 class 的 setter。
public class TestAbstractVariable extends TestAbstract {
{
final double x = 1.1;
setX(x);
}
public void setY(double y){
this.y = y;
}
}
希望对您有所帮助。
谢谢, 保罗