我处于一种情况,我有一个里面Bag有一个AddSlot方法。我有两种类型的包,ItemsBag(DCBag代表可拖动内容)
ItemsBag是一个 2D 包,这意味着它有行和列,DCBag是 1D,它只有一列但有很多行(这意味着我也可以将其视为 2D)。
现在的问题是,由于第一个包处理 2D 索引,我希望AddSlot签名是这样的:
public void AddSlot(int r, int c);
还有另一个包的AddSlot:
public void AddSlot(int r);
如何编写 in 的虚拟/抽象签名,AddSlot以便Bag何时ItemsBag和DCBag继承Bag它们可以以我上面提到的方式覆盖签名?
正如我所说,我也可以DCBag将 2D 视为 2D,以便它ItemsBag具有相同的签名,但我真的很想知道我是否可以这样做,这很有趣。
我可以使用可变数量的参数逃脱,params obejct[] args但最好以不涉及装箱/拆箱的方式进行。
我也可以制作 aTwoDimBag并使OneDimBag它们都继承自Bag,按照我想要的方式在其中编写定义AddSlot,然后进行ItemsBag继承TwoDimBag和DCBag继承OneDimBag,但我不是在寻找解决方法,而是如何实现我的目标要求。
再次回顾一下最后一次:我怎样才能写一个我可以在继承的孩子中覆盖的签名?(也就是说,如果我可以并且有办法)
谢谢。
编辑:(额外信息)其中Bag有很多功能。这两个包之间的区别在于它ItemsBag拥有一个 2d 的 Slot ( List<List<Slot>>) 列表,而DCBag拥有一个 1dList的Slot。它Slot拥有一个Item. - 里面的物品ItemsBag可以多拿一件Slot,里面的物品DCBag只能拿一件。
你可以在两个包里做的一些事情:AddSlot, FreeSlot, AddItem(添加策略不同,还有额外的添加方法ItemsBag),在两个包中你可以用鼠标拾取物品,交换物品,分类物品,两个包也收到来自插槽的通知以采取必要的措施,例如Notify_ClickedOnEmptySlot(Slot slot)
您只能在 中执行的一些操作ItemsBag:组合项目、添加一排插槽、添加一列插槽和旋转项目。
以下是这些包在外观方面的不同之处,ItemsBag(这是一个旧的演示):

DCBag:
