gpt4 book ai didi

java - 如何在这个框架中正确使用继承

转载 作者:行者123 更新时间:2023-12-02 11:34:24 25 4
gpt4 key购买 nike

我有一个抽象类ChildNode

public abstract class ChildNode {
public abstract boolean activate()
public abstract void execute();
}

和一个抽象类ParrentNode

public abstract class ParentNode extends ChildNode {
public ArrayList<ChildNode> nodes;
public void execute(){
for ( ChildNode node : nodes) {
if (node.activate()) {
node.execute();
break;
}
}
}
}

然后我会运行这个

ArrayList<ParentNode> masterNodeArray = null;
//add and create a bunch of nodes implementing different activate methods for both Child/Parent Nodes, and execute methods for child nodes
for (ParentNode node : masterNodeArray) {
if (node.activate()) {
node.execute();
break;
}
}

我的问题是,我希望父节点和子节点能够成为 ParentNode -> nodes 数组的一部分。因此,当它在 ParentNode 的执行函数中循环遍历 nodes 数组时,它将处理数组中的父节点和子节点。因此,如果它到达 ParentNode,它将把它作为 ParentNode 处理,运行预定义的执行函数,并知道它有一个 nodes 成员来循环,如果它被执行,并且如果它到达 ChildNode ,它将运行定义的执行/激活方法。

最佳答案

您的问题是您在循环中break执行中的所有ChildNode ParentNode的子节点列表

public abstract class ChildNode {
private boolean activated = true;

public final boolean isActivated() {
return activated;
}

public final void setActivated(boolean activated) {
this.activated = activated;
}

public abstract void execute();
}

public class ParentNode extends ChildNode {
private List<ChildNode> children = new ArrayList<>();

@Override public final void execute() {
for (ChildNode node : children) {
if (node.isActivated()) {
node.execute();
// DON'T BREAK HERE
}
}
}

public final List<ChildNode> getChildren() {
return children;
}
}

public class ConcreteChildNode extends ChildNode {

private final String name;

public ConcreteChildNode(String name) {
this.name = name;
}

@Override public void execute() {
System.out.println("ConcreteChildNode-" + name);
}
}

public class Test {
public static void main(String[] args) throws IOException {

ParentNode parent1 = new ParentNode();
parent1.getChildren().add(new ConcreteChildNode("1"));
parent1.getChildren().add(new ConcreteChildNode("2"));

ParentNode parent2 = new ParentNode();
parent2.getChildren().add(new ConcreteChildNode("3-1"));
parent2.getChildren().add(new ConcreteChildNode("3-2"));

parent1.getChildren().add(parent2);

parent1.getChildren().add(new ConcreteChildNode("4"));

parent1.execute();

// prints
// ConcreteChildNode-1
// ConcreteChildNode-2
// ConcreteChildNode-3-1
// ConcreteChildNode-3-2
// ConcreteChildNode-4
}
}

关于java - 如何在这个框架中正确使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com