[英]Java - Inheritance Issue
我遇到了一個問題,因為最近我一直在嘗試使用不同的知名數據結構(例如鏈表,樹,嘗試,堆等)編寫自己的“庫”。
可悲的是,我在編寫第一個(鏈接列表)時陷入困境。 為此,我編寫了一個“節點”類(單獨的文件)和一個“鏈接列表”類,該類“擴展”了“節點”類(以便將其用作參考對象)。 長話短說,這是到目前為止的代碼:
“ 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僅具有一個采用值的構造函數,因此您必須調用super(value)。
您也可以使用java.util包中的LinkedList (在這里不要重新發明輪子了)。
你LinkedList
結構應包含一個Node
,不會是一個Node
。 在Java中,如果未提供no-arg構造函數,則始終必須顯式調用super構造函數。 無論何時創建對象,所有超類的構造函數都會按照從最通用到最具體的順序進行調用,因此在這種情況下,首先要在LinkedList
構造函數之前調用Node
構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.