Java抽象类中返回不同子类对象的抽象方法返回类型定义
解决方案:将抽象方法返回类型设为
Block 核心结论
把父类Block中的抽象rotate方法返回类型从void改为Block即可。所有方块子类(包括T、Ttilt这类变体)都是Block的派生类,遵循多态规则,子类重写该方法时可以返回任意Block子类的实例,完全满足你的需求。
代码示例
abstract class Block { // 修改后的抽象方法 public abstract Block rotate(); } class T extends Block { @Override public Block rotate() { // 返回T的变体子类Ttilt实例 return new Ttilt(); } } class Ttilt extends Block { @Override public Block rotate() { // 可返回原T类或其他Block子类 return new T(); } }
关于你之前的尝试
你修改子类参数的思路完全偏离了问题核心——当前问题是返回值类型不匹配,和方法参数无关。原方法返回void无法返回对象,必须先修改父类的方法返回类型,子类才能合法重写并返回具体实例。
可用于搜索的关键词
抽象类 多态返回类型协变返回类型父类方法 返回子类实例
内容的提问来源于stack exchange,提问作者mingus2
相关产品推荐
相关产品推荐

