【发布时间】:2014-04-21 21:09:54
【问题描述】:
我遇到了一个问题,因为我最近一直在尝试使用不同的知名数据结构(例如链表、树、尝试、堆等)编写自己的“库”。
遗憾的是,我在编写第一个(链表)时遇到了困难。为此,我编写了一个“Node”类(单独的文件)和一个“Linked List”类,它“扩展”了“Node”类(以便将其用作参考对象)。 长话短说,这是我目前的代码:
“Node.java”
package helper;
public class Node<T> {
private T value;
private Node<T> next;
protected Node(T newValue) {
value = newValue;
next = null;
}
protected void printNode() {
System.out.print("{" + value + "} ");
}
}
“LinkedList.java”
package source;
import helper.Node;
public class LinkedList<T> extends Node<T> {
private Node<T> head, current;
protected LinkedList(T newValue) {
super(newValue);
// TODO Auto-generated constructor stub
}
}
显然,我什至还没有完成一半,但我不明白的是,为什么在 C++ 上(用 C++ 编码大约 4 年,最近才开始使用 java)我不必定义构造函数这会进行“super()”调用,就像调用派生类的构造函数一样,但是在 Java 上,我必须这样做..
我想做的就是使用“Node”类在“LinkedList”类中创建“Node”对象。我不希望“LinkedList”构造函数调用“Node”构造函数(我们应该调用构造函数后有一个空的链表)。
对不起,如果我听起来有点混乱,但希望你明白我想说的话。提前致谢。
编辑:请不要告诉我使用 Java 内置库,因为我这样做只是为了练习。
【问题讨论】:
-
简单:不要让
LinkedList扩展Node。这没有意义:链表不是节点,链表有节点!您无需继承Node即可使用它。 -
我不明白你的设计。为什么
LinkedList与Node有is-a-关系? -
抱歉,现在明白了.. 我不知道为什么我认为能够在 Java 中使用 Node 类,我必须将其称为派生类.. 好吧..在 C++ 中有些不同,但谢谢。
标签: java inheritance constructor extends