簡體   English   中英

Java-繼承問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM