2012-07-26 23 views
4

我有一個類Vector使用構造分配超類的引用的Java

Vector(int dimension) // creates a vector of size dimension 

我有一個擴展Vector類

public class Neuron extends Vector { 

    public Neuron(int dimension, ... other parameters in here ...) { 
     super(dimension); 
     // other assignments below here ... 
    }  
} 

我希望能夠做的是一類神經元將Neuron類中的Vector分配給另一個Vector。東西沿線

public Neuron(Vector v, ... other parameters in here ...) { 
     super = v; 
     // other assignments below here ... 
    }  

當然,我不能這樣做。有一些解決辦法嗎?即使我不能在Neuron類的構造函數中做到這一點,那也可能是好的。

+1

想要做這往往是,你應該使用一個很好的跡象[組成而不是繼承](http://stackoverflow.com/a/2399554/228171) – 2012-07-26 15:39:41

+0

我愛除非必須,否則不要使用Vector。我會使用ArrayList,而不會將它分類。根據需要使用委派最好。 – 2012-07-26 15:45:38

+0

向量是我自己的類,它模擬數學向量的行爲。我應該明確指出,我並不是在這裏談論java.util Vector類。然而,這更多的是分配對超類的引用的一般性問題。 – COM 2012-08-02 04:13:02

回答

11

您需要在Vector類來創建一個copy constructor

public Vector(Vector toCopy) { 
    this.dimension = toCopy.dimension; 

    // ... copy other attributes 
} 

,然後在Neuron你做

public Neuron(Vector v, ... other parameters in here ...) { 
    super(v); 
    // other assignments below here ... 
} 

您也可以考慮使用組成代替繼承。實際上,這是Effective Java中的一個建議。在這種情況下,你會怎麼做

class Neuron { 
    Vector data; 

    public Neuron(Vector v, ... other parameters in here ...) { 
     data = v; 
     // other assignments below here ... 
    } 
} 

相關問題:

+0

我實現了類似的東西,它並沒有給我我正在尋找的東西。該維度指定Vector類中數組的大小。該陣列是類的唯一成員,所以這是我有: 「公共向量(矢量toCopy){ this.array = toCopy.array }」 然而,當我使用拷貝構造函數做 'Vector v2 = new Vector(v1); System.out.println(v1); System.out.println(v2);' 它打印出兩種不同於v1 = v2的東西。雖然當我改變一個載體時,它會傳遞給另一個載體。 – COM 2012-07-26 15:50:33

+0

只要你做'this.array = toCopy.array'改變到一個數組也會影響另一個。只要避免諸如'System.arraycopy'之類的東西,你應該沒問題。 – aioobe 2012-07-26 15:51:33

+0

有趣的是,你發佈了關於構圖vs繼承的鏈接,因爲我之前使用過構圖並轉換爲繼承,因爲它讓代碼變得更清潔,但也許我應該切換回來。 – COM 2012-07-26 16:20:26