assigning super class a reference java
我有一个带有构造函数的类向量
1
| Vector(int dimension ) // creates a vector of size dimension |
我有一个类神经元,它扩展了向量类
1 2 3 4 5 6 7
| public class Neuron extends Vector {
public Neuron (int dimension, ... other parameters in here ... ) {
super(dimension );
// other assignments below here ...
}
} |
我要做的是将神经元类中的向量指定为另一个向量的引用。有点像
1 2 3 4
| public Neuron (Vector v, ... other parameters in here ... ) {
super = v ;
// other assignments below here ...
} |
当然,我不能这样做。有什么工作要做吗?即使我不能在Neuron类的构造函数中这样做,那也没问题。
- 想要这样做通常是一个很好的迹象,表明您应该使用组合而不是继承。
- 我不会用向量,除非你必须这样做。我会用arraylist来代替,我不会把它分类。最好根据需要使用委托。
- 向量是我自己的类,它模仿数学向量的行为。我应该清楚地表明,我不是在讨论java.util向量类。然而,它更像是一个关于为超级类分配引用的一般问题。
您需要在Vector类中创建一个复制构造函数:
1 2 3 4 5
| public Vector(Vector toCopy ) {
this. dimension = toCopy. dimension;
// ... copy other attributes
} |
然后在Neuron中你会
1 2 3 4
| public Neuron (Vector v, ... other parameters in here ... ) {
super(v );
// other assignments below here ...
} |
您还可以考虑在组合上使用而不是继承。事实上,这是有效Java中的建议之一。在这种情况下你会的
1 2 3 4 5 6 7 8
| class Neuron {
Vector data ;
public Neuron (Vector v, ... other parameters in here ... ) {
data = v ;
// other assignments below here ...
}
} |
相关问题:
- 我实现了类似的东西,但它并没有给我确切的我正在寻找的东西。维度指定矢量类中数组的大小。数组是类的唯一成员,所以这就是我所拥有的:"public vector(vector to copy)this.array=tocopy.array",但是,当我使用复制构造函数执行"vector v2=new vector(v1);system.out.println(v1);system.out.println(v2);"时,它会打印出两个不同于v1的东西=V2。不过,当我改变一个向量时,它会传递到另一个向量。
- 只要执行this.array = toCopy.array操作,对一个数组所做的更改也会影响到另一个数组。只要避免像System.arraycopy这样的事情,你就应该没事了。
- 有趣的是,您发布了关于组合与继承的链接,因为我以前使用过组合,现在切换到继承,因为它让代码更加清晰,但也许我应该切换回去。
- 当改为继承时,它通常看起来更清晰一些,但是它没有那么灵活和易于维护。经验法则是使用继承,如果并且仅当类之间存在真正的is-a关系。那么,问问你自己,神经元是载体吗?