我正在尝试学习多态,我正在构建一个Shape层次结构,其中Shape类有两个子节点,即TwoDimensionalShape和ThreeDimensionalShape。同样,TwoDimensionalShape有Circle,Square为子,ThreeDimensionalShape有Sphere,Cube为子。这是我的代码,直到现在。
public abstract class Shape
{
public abstract double area();
}
public abstract class TwoDimensionalShape : Shape
{
public abstract override double area();
}
public abstract class ThreeDimensionalShape : Shape
{
public abstract override double area();
public abstract double volume();
}
我在TwoDimensionalShape下创建了Circle和Square类,在那里我实现了area方法。我还在ThreeDimensionalShape下创建了Sphere和Cube类,我在其中实现了area和volume方法。在我的主要方法中,我试图这样做。
Shape[] myShapes = new Shape[4];
myShapes[0] = new Circle(4.0);
myShapes[1] = new Square(2.0);
myShapes[2] = new Sphere(8.0);
myShapes[3] = new Cube(6.0);
for (int i = 0; i < myShapes.Length; i++)
{
Console.Write(myShapes[i].ToString());
if(myShapes[i] is TwoDimensionalShape)
Console.WriteLine(" : Area = {0}", myShapes[i].area());
else if (myShapes[i] is ThreeDimensionalShape)
{
Console.Write(" : Area = {0}", myShapes[i].area());
Console.WriteLine(" : Volume = {0}", myShapes[i].volume());
}
}
现在我收到一个错误,我的Shape类不包含&#39; volume&#39;的任何定义。那么我在哪里放这个卷方法呢?我想我应该把它放在Shape基类本身,但是volume方法只适用于3D Shapes吗?另外,为什么我会收到此错误?如果myShapes [i]是ThreeDimensionalShape,我只调用volume方法。
那么我的体积法究竟应该在哪里?