当前位置: 首页 > 知识库问答 >
问题:

返回子类型为超类型java[重复]

令狐功
2023-03-14

如果我有以下代码

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;
    }
    ...
}

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

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是否不同时返回Can和PromotionalCan?如果是这样,当返回PromotionalCan时,如何对变量进行操作?谢谢

编辑:PromotionalCan继承自Can,第二种方法是在PromotionalCan中

共有1个答案

龙涵蓄
2023-03-14

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

public Can makeCan(String cont)

我假设PromotionalCan是Can的一个子类型,但我的第一条语句仍然有效——makeCan将只返回Can类型的对象。

 类似资料:
  • 对于一堆带有泛型的包装类,我的继承结构遇到了一些麻烦。这基本上是结构: 这将与当前代码一起编译和工作,但是,这似乎很危险。如果调用方像这样使用这个方法:,它将很好地编译,但是如果findMiddle尝试返回SubBWrapper,则在运行时会有一个ClassCastException。我以为行得通却行不通的是: 所以我的问题基本上是,有没有正确的方法来编写编译、运行并遵循最佳实践的方法findMi

  • 我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆

  • 我不确定这在Java中是否可行。而且,我也不知道该在谷歌上查询什么。无论如何,我想要一个方法,它将一个类(接口或类)作为参数,并且该方法的返回类型是该类的一个实例。我不想事后重铸一个物体。 我不确定这个功能是否存在,或者语法是什么。假设我有一个名为XYZ的类,这是我的伪方法。 现在假设XYZ是某种通用语法。这在Java中可能吗?谢谢你的帮助。

  • 在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。

  • 我正试图从使用observable转换下面的observable代码。使用可管道操作符创建到。 我已经尝试了下面的方法,但是我得到了一个转换错误,无法转换可观察的类型。看不见的。如有任何帮助,我们将不胜感激。