gpt4 book ai didi

java - 如何将具有相似父对象的一个​​对象和具有相似祖 parent 的另一个对象添加到同一对象列表

转载 作者:行者123 更新时间:2023-11-30 02:24:34 25 4
gpt4 key购买 nike

例如,我有一个抽象类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com