4

コンストラクターを持つクラス Vector があります

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

Vector クラスを拡張するクラス Neuron があります

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 クラスのコンストラクターでこれができなくても、おそらく問題ないでしょう。

4

1 に答える 1

11

クラスにコピー コンストラクターを作成する必要があります。Vector

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の推奨事項の1つです。そのような場合、あなたはするでしょう

class Neuron {
    Vector data;

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

関連する質問:

于 2012-07-26T15:29:51.203 に答える