我正在Challenge24Solver
用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。
问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。
这是我的一些课程:
abstract class Operation { \\ Basic operation class
static String token;
abstract public double operate (double x, double y);
}
class AddOp extends Operation {
static String token = "+";
public double operate (double x, double y) {
return x+y;
}
}
//other operation classes SubOp, MulOp, DivOp
class Challenge24Step { // represents one step in a solution
Operation operator;
double x, y; //operands
double value; //the value of the step (x operator y)
public Challenge24Step (Operation operator, double x, double y) {
this.operator = operator;
// constructor code;
}
public String toString () {
return String.format("%s %s %s = %s", this.x, this.operator.token, this.y,
this.value);
}
}
问题是它仍然从Operation类获取令牌:“ null”
我知道这可能是因为operator被声明为Operation,但是我不明白为什么它没有通过标准继承:实例,类,每个超类
如何重新排列脚本,以便使用更具体的操作类的标记?
您不能token
在基类中使static
成为静态对象,因为所有继承的类都将只有一个标记。您需要使其成为实例变量。您甚至不能将其放在静态方法中,因为static
Java中的方法不可覆盖。
在Java中,变量不可覆盖。如果继承一个类并添加相同名称的变量,则派生类中的变量将 隐藏 ,而不 覆盖 基类中的变量。
要解决此问题,请在基础中创建token
一个abstract
方法,在派生类中提供一个实现,然后返回所需的值。如果这样做,可以用接口替换抽象类,因为其中没有变量或实现:
interface Operation { // Basic operation class
String getToken();
double operate (double x, double y);
}
class AddOp implements Operation {
public String getToken() {return "+"; }
public double operate (double x, double y) {
return x+y;
}
}
另外,也可以在基数中不分配它,添加一个采用令牌值的构造函数,然后在其中分配它:
abstract class Operation { // Basic operation class
public final String token;
abstract public double operate (double x, double y);
protected Operation(String token) {this.token = token; }
}
class AddOp extends Operation {
public AddOp() { super("+"); }
public double operate (double x, double y) {
return x+y;
}
}
问题内容: 我已经读过1000多个位置,这些位置不继承静态变量。但是,这段代码如何正常工作? Parent.java Child.java 此代码显示“父母”。 还阅读了一些隐藏数据的概念。 Parent.java Child.java 现在输出为“ Child”。 那么这是否意味着 静态变量被继承,但是它们遵循数据隐藏的概念 ? 问题答案: 请查看oracle的文档:http : //docs.
我有一个超类看起来像这样 扩展类 科目类 尝试将从强制转换为时,出现无法强制转换的异常。 原因:java.lang.ClassCastException:com.example.bean.hrs.ProviderAccount无法强制转换为com.triphop.bean.hrs.CustomProviderAccount(位于com.triphop.service.hrsServiceImpl.
问题内容: 我有六个类,它们都扩展了相同的抽象类。抽象类具有一个静态变量,该静态变量指向一些JNI代码,我只希望在每个类实例化时加载一次。 据我了解,这将导致实例化此静态变量的一个实例,但是我想要的是每个扩展类都具有自己的变量静态实例,该实例对于给定的子类是唯一的。我想在我的抽象类中编写一些代码来修改和/或释放该抽象类。是否可以同时执行这两项操作? 例如,我可以编写一个抽象类栏,其中包含变量foo
问题内容: 我正在学习语言,这些要点摘自的规范。 虽然我能理解分1-4,我很困惑的点和: 5. 在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并在最里面的包含块的末尾结束。 6. 在函数内部声明的类型标识符的范围始于TypeSpec中的标识符,并终止于最里面的包含块的末尾。 这是我用来了解Go范围的代码: 据此,我
问题内容: 需要对私有变量和继承有更多的了解。较早之前,我的理解是在类中是否有字段,并且当我继承该类时,不受访问(私有变量)限制的字段将存在于继承的类中。但是,如果有公共的g / setter方法,我可以在基类中使用私有变量。 我怎么能想象一个基类中的私有变量? 问题答案: 结果将为10。类A中的私有字段a是B的继承类,但B无法直接访问它。仅通过使用在类A中定义的公共/默认/受保护的访问器方法。B
如果继承了方法,并且它需要一些私有变量,那么这也必须在中提供,因为我现在正在中调用? 编辑:对于那些说将调用父类方法的人,我发现只有创建的对象,而没有单独的对象一个用于子类,一个用于父类。这里