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

接口和继承:“返回类型int不兼容”

麹浩瀚
2023-03-14
问题内容
public interface MyInterface{
    public int myMethod();
}


public class SuperClass {
    public String myMethod(){
        return "Super Class";
    }
}

public class DerivedClass extends SuperClass implements MyInterface {
    public String myMethod() {...}  // this line doesn't compile 
    public int myMethod() {...}     // this is also unable to compile
}

当我尝试编译时,DerivedClass它给了我错误

java:interfaceRnD.DerivedClass中的myMethod()无法覆盖interfaceRnD.SuperClass中的myMethod()
  返回类型int与java.lang.String不兼容

我应该如何解决这个问题?


问题答案:

该错误是由于以下事实导致的:调用myMethod将是不明确的-
应该调用两种方法中的哪一种?从JLS§8.4.2开始:

在类中声明两个具有重写等效签名的方法是编译时错误。

方法的返回类型不是其签名的一部分,因此根据上述说明,您将收到错误。

假设您不能简单地重命名冲突的方法,在这种情况下就不能使用继承,并且需要使用诸如composition这样的替代方法:

class DerivedClass implements MyInterface {

    private SuperClass sc;

    public String myMethod1() {
        return sc.myMethod();
    }

    public int myMethod() {
        return 0;
    }

}


 类似资料:
  • 我有一个父类和子类、和,它们描述了如何购买水果的不同类型。 在篮子里插入购买的特定水果; 计算购买水果的总价值; 计算用于给定类型水果(水果名称)的总金额 为了与其他项目的类兼容,在各个类中使用的执行要支付金额的计算的方法将具有名称payFruit,返回类型double并且没有参数。此方法必须在接口中声明。 注意:我知道这可能对我的情况很特殊,对其他人没有太大帮助,但我发现这个类层次结构在使用时有

  • 假设我已经包装了我的C类和,并且可以通过SWIG生成的模块从Python访问它们: 在Python中,我创建了面向用户的类,它是一个浅层代理,主要添加docstring,并允许IDE对参数名称进行制表符补全: 问题在于,返回类型为,它没有docstring,也不显示参数名称(swig将所有参数公开为)。相反,我希望它提供我自己的浅代理

  • 我在抽象课上有以下内容... 还有另一个类,它继承了这个类... 当我从主类执行以下调用时,我收到一个错误... 我的问题是..为什么会发生这种情况?我的getEntityById不是返回T型的东西,在这种情况下应该是产品吗? 我在 Netbeans 中工作,编译时未显示任何错误。 感谢您的帮助=)

  • 为了在 .NET Core 中使用依赖关系注入,我们构建了一堆存储库接口,供控制器用于数据库交互。 我们有一个< code>EntityBase类,其中包含一些方法,我们的通用存储库接口使用这个基类,例如:< code>IRepository 我想添加一个更具体的 类,该类扩展了 ,以表示我们有一些要按标记筛选的实体。我希望 有一个抽象属性,我可以在控制器中使用该属性,以便我可以抽象出来并重用过滤

  • 问题内容: 快速问题,我正在学习有关接口和继承的知识。 这不是实际的代码,仅是示例。假设我有抽象类Animal。马,犬等团体有一定的继承权。还有一个“宠物”界面。它将用于Animal的不同子类。犬“狗”的子类实现接口“宠物”。因此,“狗”的所有子类也都实现了“宠物”接口,而不必在“狗”的每个子类上单独实现“宠物”,对吗? 问题答案: 如果你有: 哪里 那么所有扩展StaffMember的类都将继承

  • 我定义了这个类: 在其他地方,在具有此签名的函数中: 我尝试返回新的ActorMapper(),但javac抱怨: 我可以投射它,它工作得很好,但为什么不能编译呢。有人能帮我吗?:)