我必须在Java中实现一个名为Graph<E>
的接口。
让我们说MyGraph<E extends Comparable<E>>
是我写的用来实现图形的课程。
我想创建一个内部类Node
,以便&#34;封装&#34;类型E
的元素。
public class MyGraph<E extends Comparable<E>> implements Graph<E>{
MyGraph methods and instance variables...
.
.
.
class Node {
E elem;
List<E> edges;
...
public Node(E e){
this.elem = e;
edges = null;
}
}
}
问题是我无法理解内部类应该是Node
还是Node<E>
,public
还是private
,如果它的实例变量应该是声明为public
或private
。对于我将在Node
中插入的一些最终方法也是如此。
基本上,类Node应该像C中的记录类型(带typedef
),外层应该能够访问节点的所有实例变量而没有观察者,吸气等等
答案 0 :(得分:1)
您应该将Node类声明为private static,因为它不需要访问外部类的成员。如果不这样做,每个实例都会带有对实例化实例的引用。你需要给它一个参数来做到这一点。
如果使用E作为参数名称,它将遮蔽外部类中的E,因此为了清晰起见,请考虑为其指定一个不同的名称。您的外部类将具有对Node成员的完全访问权限,如果Node是私有的,则没有其他类可以访问,因此您无需担心成员的访问级别 - 只需省略它们。