Java接口,调用哪个实现

时间:2016-11-09 02:16:02

标签: java interface

我必须为学校项目编写代码,为此,他们为我们提供了一些界面来帮助我们设计类实现。

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)?或我实施的任何其他?我不明白先叫哪一个......

2 个答案:

答案 0 :(得分:1)

- 这将从 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);

答案 1 :(得分:0)

我们假设我们有一个Parser类。

public Parser {
    public INode parse(){
        return new BlockNode(); // this will return a new BlockNode.
    }
}

现在,如果你想确定在没有看到解析方法的情况下返回给你的类型。您可以在以下位置更改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.