java中的多功能

java中的多功能,java,oop,Java,Oop,发件人: 有两个函数:一个是public,调用第二个函数,第二个函数有更多参数,定义为private class Node{ int data; ArrayList<Node> children = new ArrayList<Node>(); } public static Node buildTree(int[] preOrder, int[] postOrder){ if(preOrder == null || postOrder == n

发件人:

有两个函数:一个是public,调用第二个函数,第二个函数有更多参数,定义为private

class Node{
    int data;
    ArrayList<Node> children = new ArrayList<Node>();
}

public static Node buildTree(int[] preOrder, int[] postOrder){
    if(preOrder == null || postOrder == null){
        throw new NullPointerException();
    }
    if(preOrder.length != postOrder.length){
        throw new IllegalArgumentException();
    }
    return buildTree(preOrder, 0, preOrder.length-1, postOrder, 0, postOrder.length -1);
}

private static Node buildTree(int[] preOrder, int preMin, int preMax, int[] postOrder, int postMin, int postMax){
    //construct the root;
    Node root = new Node();
    root.data = preOrder[preMin];

    //construct the child branches
    int preIndex = preMin + 1;
    int postIndex = postMin;
    while(preIndex <= preMax &&  postIndex <= postMax -1){
        //preOrder[preIndex] is now the root of the next child branch
        //find where preOrder[preIndex] occurs in postOrder
        int shift = 0;
        while(postOrder[postIndex + shift] != preOrder[preIndex]){
            shift++;
        }
        Node child = buildTree(preOrder, preIndex, preIndex + shift, postOrder, postMin, postMin + shift);
        root.children.add(child);
        shift++;
        preIndex += shift;
        postIndex += shift;
    }
    return root;
}
类节点{
int数据;
ArrayList子项=新的ArrayList();
}
公共静态节点构建树(int[]前序,int[]后序){
if(前序==null | |后序==null){
抛出新的NullPointerException();
}
if(preOrder.length!=postOrder.length){
抛出新的IllegalArgumentException();
}
返回构建树(preOrder,0,preOrder.length-1,postOrder,0,postOrder.length-1);
}
私有静态节点构建树(int[]预序、int preMin、int preMax、int[]后序、int postMin、int postMax){
//构建根;
节点根=新节点();
root.data=preOrder[preMin];
//构造子分支
int preIndex=preMin+1;
int postIndex=postin;

而(preIndex公共的是接口契约,任何调用方都可以直接使用它。私有的是内部实现,可以创建另一个
节点
实现,并提供相同的
公共
接口(使用不同的方法实现)。这是一项实施决策,在概念上由(维基百科说)用于在类中隐藏结构化数据对象的值或状态,防止未经授权的方直接访问它们。

根据面向对象编程的概念,公共buildTree方法可以在其他类和包中访问,但私有buildTree方法只能在类中使用。

这些是ot构造函数。类
节点
没有显式构造函数构造函数必须没有返回类型,并且它的名称必须与类名完全相同。您有两个重载方法,其中只有一个是公开的。