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

错误:方法X必须重写或实现超类型方法

农建弼
2023-03-14

我正在使用JUnit 5,并从“软件测试”书中复制了代码,以便创建一个模拟对象进行测试。部分测试器代码是:

 @Test
 public void rangesOKTestWithoutDependency() {
    // This is an anonymous class
    SimpleDate simpleDate = new SimpleDate(1, 1, 2000) {
         @Override
         public boolean isLeap(int year) {               
             if(2000 == year) return true;
             else if(2001 == year) return false;
            else throw new IllegalArgumentException("No Mock for year " + year);
         }
 };
 assertTrue(simpleDate.rangesOK(2, 29, 2000)); // Valid due to leap year
 assertFalse(simpleDate.rangesOK(2, 29, 2001)); // Valid due to leap year
 }

我有一个编译器错误,它说“方法isLeap(int)必须覆盖或实现一个超类型方法”。此错误在我覆盖isLeap()方法的行中报告。(@over下面的行)

好吧,令人惊讶的是,这就是我所做的。所以我不知道这是什么抱怨。下面是simpleDate类中的isLeap()方法:

private boolean isLeap(int year) {
           boolean isLeapYear = true;
           if(year % 4 != 0)
                 isLeapYear = false;
           else if(year % 100 != 0)
                 isLeapYear = true;
           else if(year % 400 != 0)
                 isLeapYear = false;
           return isLeapYear;
    }

正如您所看到的,测试仪中的方法是原始方法的重写版本,但我仍然得到一个错误。有什么想法吗?

ps:我正在使用eclipse。

共有2个答案

王宏扬
2023-03-14

我打算做的是测试一个“私有”方法,这当然是不可见的。因为它不可见,所以我无法覆盖它。所以我犯的错误完全有道理。

我用java解决了测试私有方法的问题。这个想法来源于本文。

现在,我在想的是如何为其他不提供类似API的语言解决同样的问题。换句话说,如何创建一个模拟对象以进行测试,如果可能的话,以规避方法的不可见性

严信瑞
2023-03-14

超类中的私有方法对子类不可见。您需要删除@Overries注释或将SimpleDate中的方法更改为protected以删除编译错误。

删除@Overder不会影响超类,两个isLeap方法没有覆盖关系。

将SimpleDate中的方法更改为protected,子类中的方法确实会覆盖超类中的方法。

 类似资料:
  • 我是Android和Java的初学者。我寻找这个错误的答案,但stackOverflow中的任何东西都不适合我的情况。我在读一本书,书中说我们需要使用一个onListItemClick()方法,该方法来自我们创建的扩展ListFragment的类(CrimeListFragment)(使用该方法和类是必需的)。 然而,我不断发现以下错误: 错误说 “CrimeListFragment类型的onLi

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

  • 我有以下代码:https://pastebin.com/19njjj9s(我放在这里是因为对于stackoverflow来说代码太多了) 但是它不会覆盖onClick方法(第192行),我不明白为什么。 重写onclick方法背后的想法是获取日期并接收radiogroup以设置其中一个值。如果有人能帮我,我会帮你的。

  • 问题内容: 这是我的代码,假设可以在按下按钮时更改一些文本:- 用下划线标记,它给我一个错误“类必须声明为抽象或实现抽象方法”。该代码大部分是从互联网上复制的,并且可以正常工作。可能仅是Android Studio错误。我如何使它工作? 问题答案: 必须实现该函数,否则您的类应该是抽象的,以便可以在某些子类中实现您的函数。但是在您的情况下,您犯了一个拼写错误。应该代替;

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