返回子类型为超类型java

时间:2016-11-22 21:01:42

标签: java oop inheritance

如果我有以下代码

public class Can
{
    ...
    public Can makeCan(String cont)
    {   boolean winner = false;
        Can a;
        if(turn)
        {   winner = true;
            a = new PromotionCan(cont,winner);  
        }
        else
        {   a = new Can(cont);
        }
        return a;
    }
    ...
}

首先,这是可能的,因为它编译得很好。但我无法使用PromotionalCan中的方法执行操作:

public class PromotionCan extends Can
{
    ...
    public boolean isWinner() throws NotEmptyCanException
    if(win)
       {    System.out.println("Can is winner");
           return win;
        }
        else
        {   System.out.println("Can is not winner");
            return win;
        }
    }
    ...
}

makeCan不会同时返回CanPromotionalCan吗?如果是这样,当返回PromotionalCan时如何操作变量?感谢。

编辑: PromotionalCan继承自Can,第二种方法位于PromotionalCan

1 个答案:

答案 0 :(得分:2)

makeCan只会返回一个Can,因为这是它的返回类型,如下所示:

public Can makeCan(String cont)

我假设PromotionalCan是Can的子类型,但我的第一个语句仍然存在 - makeCan将只返回Can类型的对象。