java中的多个函数

时间:2014-12-25 23:07:27

标签: java oop

来自this answer

有两个功能:一个是公共的,并且调用第二个具有更多参数并被定义为私有的功能。

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;
}

为什么第一个函数定义为public,第二个函数定义为private? (我是OO编程的新手)

2 个答案:

答案 0 :(得分:0)

公共的是接口合同,任何呼叫者都可以直接使用它。私有实现是内部实现,可以创建另一个Node实现并提供相同的public接口(具有不同的方法实现)。这是一个实现决策,概念性地由encapsulation覆盖(维基百科称)用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问它们

答案 1 :(得分:0)

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