来自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编程的新手)
答案 0 :(得分:0)
公共的是接口合同,任何呼叫者都可以直接使用它。私有实现是内部实现,可以创建另一个Node
实现并提供相同的public
接口(具有不同的方法实现)。这是一个实现决策,概念性地由encapsulation覆盖(维基百科称)用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问它们
答案 1 :(得分:0)
根据面向对象编程概念,公共buildTree方法可以在其他类和包中访问,但私有buildTree方法只能在类中使用。