【发布时间】:2012-01-06 12:53:35
【问题描述】:
我知道转换实际上只能从子类到超类(向上转换),但这个例子说明了我想做的事情。
Class Super {}
Class Sub extends Super {}
Super super = new Super();
Sub sub = (Sub)super;
我相信这被称为“向下”强制转换,因此是不允许的......
在给定 Super 类型的对象的情况下,创建 Sub 类型的对象的最佳方法是什么。
编辑:
这就是问题 - 将动物转换为猫的最佳方法是什么。
答案?从基本类型的动物开始,然后将属性复制到猫。添加毛皮和尾巴等。基本上是一个复制构造函数。这是正确的答案(还是一个好的答案)?
另一个编辑:
我认为我的问题很清楚,但可能太笼统了。要求做某事的“最佳”方式往往会给出很多不同的回应。我意识到最好的方法在不同的情况下可能会有所不同。
我不是在寻找有关 Java 或 OO 基础知识的教程。只是征求意见,以便我可以使用最佳实践来解决这个问题。
【问题讨论】:
-
从你的问题来看,根本不清楚你知道什么,不知道什么。因此,当人们回答 我相信这被称为“向下”转换,这是不允许的部分而不是(非常模糊的)“实际问题”时,不要感到惊讶。是的,复制构造函数就是这样。不,它不是唯一的,工厂方法就可以了。不,这不是最好的——我们不知道你有什么限制和假设。
-
@alf 我可以说我的问题对你来说很清楚 - 你能提供更多关于如何表达问题的建议吗?我希望能够提出一个可以为网站增加价值并获得有价值的回复的问题,但在这种情况下,我似乎有点失败了......被误解了,被否决了,我最终有点沮丧。
-
嗯,我可以看到投票的细分,并且没有投票反对。也没有投票,但这不是重点,是吗?标准的 HOWTO 将是 catb.org/~esr/faqs/smart-questions.html — 这很好而且很中肯。关于当前的问题,我想说把责任归咎于那些试图提供帮助的人并不是一个很有成效的想法。当您需要两次编辑时,说您的问题很清楚,这几乎是罪魁祸首,以至于只有少数人会注意到差异。在此处添加“感谢您实际阅读我的问题”,您将获得相当大的攻击性。善待。修正错误。不要责备
-
...而且,是的,“我可以说我的问题对你来说很清楚”——如果有人假装知道他们的想法,人们通常会生气。我确实。在真正的一对一聊天中可能会很好,但在公共场合就不行。
-
郑重声明,我并没有试图(或无意)责备,而是试图反驳和澄清。