繁体   English   中英

Java接口,称为实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM