我通过继承自己的Point类来编写自己的Vector类。我在Point类中调用x,y和z的字段我想在Vector类中调用i,j和k。相同的私有双变量支持属性。
我使用的方法是在Vector类中将x,y和z声明为私有,并将i,j和k设置为public,但使用相同的get / setter,如下所示:
这项工作是否正常,还是让我心烦意乱?
public class ptsVector : ptsPoint
{
private double x { get { return x_; } set { x_ = value; } }
private double y { get { return y_; } set { y_ = value; } }
private double z { get { return z_; } set { z_ = value; } }
public double i { get { return x_; } set { x_ = value; } }
public double j { get { return y_; } set { y_ = value; } }
public double k { get { return z_; } set { z_ = value; } }
// methods elided for clarity
}
请注意,Point类的x_,y_和z_为受保护的双精度数。
答案 0 :(得分:3)
我认为我们需要有关如何使用这些内容的更多信息。如果你不需要将ptsVector称为ptsPoint,那么我就会放弃继承。你能说一个向量是一个点吗?如果没有,那么多态在这里是不合适的。
除了这个特殊的例子,我认为别名一个属性是一个坏主意,无论如何。它增加了许多复杂性,没有真正的好处。
答案 1 :(得分:2)
我会避免这样做:从语义的角度来看,它们是两个不同的概念,一个并不真正“继承”另一个。如果有的话,我会说 vector 包含两个 points ,因为它被定义为从A点到B点的路径。
正如你所说,当你开始为课程添加功能时,你会让自己心痛。您认为从这种继承中获得的任何好处最好以语义正确的方式进行。