所以我對面向對象編程還很陌生,我試圖在Java中學習更多關於抽象類和接口的知識。雖然在網上搜索我發現了一些遍歷樹的代碼:嵌套在類中的Java接口
import java.util.*;
public class TreeTraverser
{
// Please do not change this interface
public static interface Node
{
int getValue();
List<Node> getChildren();
}
public static List<Node> traverseTreeInWidth(Node root)
{
/*
Please implement this method to
traverse the tree in width and return a list of all passed nodes.
The list should start with the root node, next
it should contain all second-level nodes, then third-level nodes etc.
The method shall work optimally with large trees.
*/
List<Node> passedNodes = new ArrayList<Node>();
passedNodes.add(root);
for (int i=0; i<passedNodes.size(); i++)
{
for (Node child: passedNodes.get(i).getChildren())
passedNodes.add(child);
}
return passedNodes;
}
}
我的第一個問題與接口有關。我認爲接口通常有自己的文件,將它包含在類似的類中的目的/好處是什麼?
我的第二個問題是我將如何訪問此代碼並使用我自己的樹進行測試?我知道,如果我有另一個類,我需要這樣的:
public class Test implements TreeTraverser.Node {...}
但是,如果我嘗試創建我自己的節點類,然後覆蓋在接口中的方法,我得到一個錯誤,我返回類型公開名單getChildren()不兼容,所以我不知道如何去測試我自己的樹。
謝謝您提前幫助我。
包括一個類內部的'interface'的好處,就是讓你可以將其稱爲'TreeTraverser.Node',以將其與其他'Node'接口區分開來,並強調'Node'的定義與'TreeTraverser'應該如何工作有關,可讀性。 AND:你應該可以按照你說的方式寫一個Test類;如果它給你一個錯誤,你做錯了什麼。請發佈您嘗試過的'Test'類。 – ajb
當你實現它時,你是否使返回類型爲'List'?這應該工作。 'List '不會,因爲'Node'在沒有外部類名的情況下是不可見的。 –
ajb
這是一個解決betterprogrammer.com難題的方法,據我所知 – Joeblade