我处于一种情况,我有一个里面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
: