我知道转换实际上只能从子类到超类(向上转换),但这个例子说明了我想做什么.
Class Super {}
Class Sub extends Super {}
Super super = new Super();
Sub sub = (Sub)super;
Run Code Online (Sandbox Code Playgroud)
我相信这被称为"向下"铸造,这是不允许的......
给定Super类型的对象,创建Sub类型对象的最佳方法是什么.
编辑:
这就是问题 - 将动物转换为猫的最佳方法是什么.
答案?从基类型动物开始,将属性复制到cat.添加毛发和尾巴等基本上是一个复制构造函数.这是正确的答案(或一个好的答案)?
另一个编辑:
我认为我的问题很清楚但也许它太笼统了.要求采用"最佳"方式做某事往往会产生很多不同的反应.我意识到在不同情况下最好的方式可能会有所不同.
我不是在寻找有关Java或OO基础知识的教程.只是捕获意见所以我可以解决这个问题,因为我已经使用最佳实践概述了它.
A Cat是一个Animal.
如果我给你一只动物(不一定是猫),你会怎么把它变成猫?
编辑:
几乎可以做任何事情.大多数时候,你不应该.我相信更好的设计将消除向下转型的需要.但是你可以:
有一个构造函数,Super它采用Subas参数.
实现一个工厂,Super并有一个带Sub参数的方法.
我建议你扩展你的问题,告诉我们你需要什么,因为我真的认为存在一个更优雅的解决方案.
如果实际对象的类型为"Sub",则只能向下转换.例如:
Super subAsSuper = new Sub();
Sub sub = (Sub)subAsSuper
Run Code Online (Sandbox Code Playgroud)
你的方式不会起作用,因为super不是sub的子类.所以你会得到运行时错误.