- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我有一个抽象类 ShapeParent,它有一个抽象方法CalculateArea();
public abstract class ShapeParent
{
public abstract void CalculateArea();
}
然后我有两个子对象,它们扩展 ShapeParent 并实现CalculateArea();第一个是矩形:
public class Rectangle : ShapeParent
{
public override void CalculateArea()
{
//Area calculated here
}
}
第二个是圆:
public class Circle : ShapeParent
{
public override void CalculateArea()
{
//Area calculated here
}
}
并考虑这样的场景:我还有一个通用 Shape 类,它也扩展了 ShapeParent。该形状类将是集合/列表中使用的所有其他形状的通用容器。它有一个名为 GetType() 的附加方法,用于获取基础 Shape 类型:
public class Shape : ShapeParent
{
public object UnderLyingShape { get; set; }
public override void CalculateArea()
{
((ShapeParent)UnderLyingShape).CalculateArea();
}
public Type GetType()
{
return ((ShapeParent)UnderLyingShape).GetType();
}
}
然后我将声明以下内容的列表:
private readonly List<Shapes> _myShapes = new List<Shapes>();
这一切都工作正常,但请考虑当我想使用新方法CalculateVolume()添加一个新的Shape类型(例如Cylinder)时,它是一个可卷的形状;到这个形状列表。
执行此操作的最佳方法是什么?我是否可以创建扩展 ShapeParent 的 CylinderParent 对象,以便它选择CalculateArea() 方法并添加CalculateVolume() 的抽象定义,然后Cylinder 对象将实现该抽象定义?但是我可以将其添加到形状列表中吗,因为公共(public)对象是该对象的祖 parent ,而其余对象的父对象?这是最好的方法吗?
最佳答案
我会考虑将“Volumable Shape”作为一个界面。即IVolumable
。您也可以对面积计算执行此操作(例如 IAreaCalculable
)。通过这种方式,您可以检查 shapeparent 是否实现了特定行为,并在可能的情况下调用它,如果没有,则可以忽略它,或者只是将形状存储为列表中您想要的行为。
说实话,Shape 也可能是一个接口(interface),因为这就是它在示例中的作用。
关于java - 如何将具有相似父对象的一个对象和具有相似祖 parent 的另一个对象添加到同一对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965767/
我是一名优秀的程序员,十分优秀!