当前位置: 首页 > 面试题库 >

具有不同签名的替代方法

黄磊
2023-03-14
问题内容

我有一个超类的方法:

protected <E extends Enum<E>,T extends VO> void processarRelatorioComEstado(Date dataInicial, Date dataFinal, E estado) throws RelatorioException {

    throw new UnsupportedOperationException("method not overridden");
}

在其子类之一中,我想执行以下操作:

    @Override
protected <E extends Enum<E>> DemonstrativoReceitaDespesasAnexo12Vo processarRelatorioComEstado(Date dataInicial, Date dataFinal, E estado) throws RelatorioException {
//do something
return DemonstrativoReceitaDespesasAnexo12Vo;
}

但这是行不通的。问题是我有一个超类的引用,并且我想只在其中一个子类中调用此方法。


问题答案:

您不能在重写方法中更改类型参数的数量。对于您的情况,返回类型显然会覆盖失败。但是,即使返回类型相同,您的方法仍然不会被覆盖等效,因为您应该覆盖的方法中的类型参数更少。

从JLS-
方法签名

如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。

如果满足以下所有条件,则两个方法或构造函数声明M和N具有相同的参数类型:

  • 它们具有相同数量的形式参数(可能为零)
  • 它们具有 相同数量的类型参数 (可能为零)

因此,即使以下代码也会失败:

interface Demo {
    public <S, T> void show();
}

class DemoImpl implements Demo {
    @Override
    public <T> void show() { }  // Compiler error
}

由于show()类型参数较少,因此类中的方法没有覆盖接口中的方法。

因此,您应该确保方法签名与该JLS部分中指定的完全相同(相同名称,相同数量和类型的参数(包括类型参数),协变量返回类型)。



 类似资料:
  • 我有一个类,比如说,它有两个函数,它们的名称相同,参数数量相同,但参数类型不同。现在,我假设模拟它们的返回值应该像使用两个语句和适当的匹配器一样,但是当我尝试得到以下错误时: 组织。莫基托。例外。滥用。InvalidUseOfMatcherException:此处检测到错误放置的参数匹配器: - 以下是我尝试的一个例子: 虽然我不是Mockito的巫师,但我已经使用它一段时间了,从来没有遇到过这个

  • 我在一次面试中被问到以下问题: 问题:名称和签名相同但返回类型不同的方法。他问我,可能吗?这种类型叫什么。 有人能告诉我以下情况吗: > 上面的事情在任何情况下都是可能的(至少像一个在基类中,一个在派生类中?)如果是,是什么类型?比如编译或运行时多态? 在编译时多态性中,如果方法的返回类型与签名也不同,该怎么办?但只有函数的名称是相同的。还是编译时多态性吗? 在重写中,如果我有不同的返回类型,但方

  • 问题内容: 我发布了我的APP,然后为了测试它,在手机上安装了APK。使用导出的APK,Facebook无法正常工作(错误的哈希),但是使用开发人员bin.ed apk可以正常工作。 有人可以告诉我怎么回事吗?密钥哈希为何不同?(第二次,日食更新第一次更改了它)。 也 由于我已经将APK上传到市场并发布了(现在尚未发布,非常烦人)。另外,我已经在本地删除了APK,因此我无法找到密钥哈希,也无法从市

  • 问题内容: 我有三个类:,和。 继承自和(按此顺序)。的构造特征和不同。如何调用两个父类的方法? 我在代码中的努力: 产生错误: 我发现此资源用不同的参数集解释了多重继承,但他们建议对所有参数使用和。我觉得这很丑陋,因为我无法从子类的构造函数调用中看到将哪些参数传递给父类。 问题答案: 千万 不能* 使用,除非你知道自己在做什么。第一个参数告诉它寻找下一个要使用的方法时要 跳过的 类。例如,将查看

  • 在JLS 8第8.4.8.1节中,有一条声明: 在某些参数化下,泛型超类C中的具体方法可以与该类中的抽象方法具有相同的签名。在这种情况下,具体方法是继承的,而抽象方法不是。然后应将继承的方法视为覆盖其来自C的抽象对等体。 有人能为泛型类提供这种参数化的例子吗?我不能。

  • 我有一个采访问题-C#,是否可以在一个类中实现,从接口继承有两个具有相同名称和相同签名的方法?