这段代码不是我的,我需要对其进行一些改进,但我陷入了这个问题。
我有一个抽象类“CallNode”和很多子类,其中一个是“Call”。 “Checker”类拦截未接来电,但将它们作为 CallNode 返回。我的问题是我需要获取此调用的 ID,但我无法通过 CallNode 访问它。
你对解决这个问题有什么建议吗?
我给你代码,这样你可以更好地理解问题:
public abstract class CallNode {
public abstract CallNode hasMissingCall();
}
public class Call extends CallNode {
public int id;
// Simplification of method
public CallNode hasMissingCall() {
if (true)
return this;
// ...
}
}
public class Checker{
private static CallNode rootExpected;
CallNode missing = rootExpected.hasMissingCall();
System.out.println( missing.id ); // THE PROBLEM!!!
}
提前致谢!!!
最佳答案
在抽象类中定义一个返回id的模板方法:
public abstract class CallNode {
public abstract CallNode hasMissingCall();
public abstract int getId();
}
让子类实现它:
public class Call extends CallNode {
public int id;
// Simplification of method
public CallNode hasMissingCall() {
if (true)
return this;
// ...
}
public int getId()
{
return this.id;
}
}
这是一种选择。我个人将在 CallNode 类中向上移动 id 字段,因为我认为它应该是唯一的并由所有子类共享。
关于Java从抽象类访问子类方法/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875129/