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

Java错误:方法不会覆盖或实现来自超类型的方法

陆高峰
2023-03-14

我有3个类,配置如下:Class1有几个方法,其中一些是抽象的:

package package1;

public abstract class class1{
    protected abstract void methodX();

    public boolean methodY(){
        //method implementation
    }

    public String thisIsTheMethodThatMatters(){
        //method implementation
    }
}

接下来,来自同一个包的class 2扩展了class 1,覆盖了它的抽象方法并添加了一些其他方法:

package package1;

public class class2 extends class1{
    @Override
    protected final void methodX(){
        //method implementation
    }

    public boolean methodZ(){
        //method implementation
    }
}

最后,另一个包中的class3扩展了class2并覆盖了class1中的一个方法:

package package2;

import package1.class2;

public class class3 extends class2{
    @Override
    public String thisIsTheMethodThatMatters(){
        //method implementation
    }
}

我正在使用Eclipse,并且它在编码时不会检测到任何错误。我正在使用Maven Build构建项目,但构建失败,说thisIsTheMethod odThatMats()不会覆盖或实现来自超类型的方法,我正在确保Package1在Package2之前构建,因此我认为问题不存在。

共有1个答案

黎征
2023-03-14

如果您在类1中使用protected as access修饰符定义了您的方法(thisIsTheMethod odThatMats),则可能会发生这种情况。换句话说,如果方法的签名是

protected String thisIsTheMethodThatMatters()

然后你会得到错误,因为基于上述场景,该方法将不会被类3继承

 类似资料:
  • 构建基于链表的队列实现。由于以下两个错误,无法运行应用程序: 错误#1:错误:队列。ListIterator不是抽象的,并且不会覆盖迭代器中的抽象方法next(),其中Integer是一个类型变量:Integer扩展类队列中声明的对象。列表迭代器 错误#2:错误:队列中的next()。ListIterator无法在迭代器中实现next(),返回类型int与Integer不兼容,其中E、Intege

  • 我们在项目的模块P中有一个接口。我们正在使用maven构建代码。界面如下 在类中重写,并使用模块Q的注释来实现。maven构建工作正常很多天了。 我为这个界面添加了一个新方法 我已经用注释覆盖了Class中的这个方法,并执行了构建。构建抛出错误 方法不会重写或实现超类型中的方法 我已经正确添加了模块的配置。我正在使用Java1.8。请让我知道缺少任何配置。 在这个链接中也发现了同样的错误。 我也尝

  • 我正在制作一个定制的盔甲,在我的盔甲课程中我得到了这个错误: ArmorE类型的方法getArmorTexture(ItemStack,Entity,int,int)必须重写或实现超类型方法 为什么我会犯这个错误? 这是我的代码: 装甲等级: 主类的一部分:

  • 问题内容: 在UIViewController中,此代码: 给出错误 我正在使用Xcode 8 beta 4,且iOS部署目标是9.0,并且在 如何将上面的代码转换为Swift 3? 问题答案: 像这样: …还有其余的。 一般模式 现在,许多Cocoa方法都是属性,因此您可以将它们实现为重写计算变量。因此,从种子3(或更早)移动到种子4的模式是: 更改为 删除 更改为 之所以可行,是因为计算的变量

  • 问题内容: 我更新到Xcode 8 beta 5,现在在从UIView继承的类上收到以下错误: 有解决方法吗? 问题答案: 请检查最新参考。(您只需在Apple开发者网站的搜索栏中输入“ intrinsicContentSize”,就可以轻松找到它。) 宣言 已成为计算属性,因此您需要以这种方式覆盖它: 或者简单地: