菜鸟关于类的问题
原来一直是弄c++的,刚刚开始学java。看源码的时候对类的构造有点疑问
public class BinaryTree<Node extends BinaryTree.BTNode<Node>> {
public static class BTNode<Node extends BTNode<Node>> {
public Node left;
public Node right;
public Node parent;
}
/**
* Used to make a mini-factory
*/
protected Node sampleNode;
/**
* The root of this tree
*/
protected Node r;
/**
* This tree's "null" node
*/
protected Node nil;
....
....
}
这是我们教授给的源码,public class BinaryTree<Node extends BinaryTree.BTNode<Node>>不太懂,意思是Node是一个节点,在类的内部定义的。但如果我在另外一个文件定义了一个Node,然后在这里直接用效果不也是一样的吗?这里的Node的作用是相当于模版吗?
--------------------编程问答-------------------- Node不止是一个节点,应该是一个实体类。这个类应该是你在外部定义的(当然也可以在内部定义)
你应该把这个当成一个实体类来看待。
protected Node sampleNode; /** * The root of this tree */ protected Node r; /** * This tree's "null" node */
protected Node nil;
这三句话的意思是在这个类内部构建三个Node类的对象 --------------------编程问答-------------------- 这是泛型。基础语法,网上找找资料吧。 --------------------编程问答--------------------
泛型我知道,但这样的一个类如何实例化呢。如果只是 public class BinaryTree<Node> {
....
}
这样的一个类我知道怎样去实例化 --------------------编程问答-------------------- 从最简单的学起 --------------------编程问答-------------------- <Node extends BinaryTree.BTNode<Node>>
这个定义了泛型上限,意思是你必须用BinaryTree.BTNode<Node>或其子类做参数。将你的Node类extends Binary.TBNode<Node>试试 --------------------编程问答--------------------
这位兄弟解释正确,泛型的类型强制指定了
我是先学Java ,现在去学C++ 才发现Java比C++好理解多了,先学Java再去学C++ 发现C++特别扭
补充:Java , Java SE