[英]Java interface, which implementation is called
我必须编写一个学校项目的代码,为此,它们给了我们一些接口来帮助我们设计类的实现。
INode
是其中之一 :
public interface INode {
void buildString(StringBuilder builder, int tabs);
}
我们必须多次实现此接口。
BlockNode
是其中之一 :
public class BlockNode implements INode {
@Override
public void buildString(StringBuilder builder, int tabs) {
}
}
现在我的问题是,他们在main函数中做到了(解析的类型是INode):
root = parser.parse();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
我不知道哪个实现
buildString(StringBuilder builder, int tabs)
叫做。 可能是我上面写的那个(BlockNode)? 或其他我实施的? 我不知道首先叫哪个。
-这将从BlockNode调用方法
INode root = parser.parse(); // Let's assume it return new BlockNode();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
-这将从SomeNode调用方法
INode root = parser.parse(); // Let's assume it return new SomeNode();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
假设我们有一个解析器类。
public Parser {
public INode parse(){
return new BlockNode(); // this will return a new BlockNode.
}
}
现在,如果您想确定返回哪种类型,而不需要查看parse方法。 您可以在INode中更改方法
从:
void buildString(StringBuilder builder, int tabs);
至:
String buildString(StringBuilder builder, int tabs);
然后在类节点上实现它时:
public class BlockNode implements INode {
public String buildString(StringBuilder builder, int tabs) {
return "BlockNode";
}
}
or
public class OtherNode implements INode {
public String buildString(StringBuilder builder, int tabs) {
return "OtherNode";
}
}
现在,通过这种方式,您可以通过打印来区分返回的类型。
root = parser.parse();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
String nameOfClass = root.buildString(builder, 0);
System.out.println(nameOfClass); // this will identify what type is returned.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.