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

访问在其他实现类中重写的*默认方法*

陈铭晨
2023-03-14

考虑以下场景。

public interface Test{
    default void printSomething(){
        System.out.println("*default void printSomething()* called");
    }
}

现在,我在一个实现类中实现这样一个接口,并在这个类中重写上面的方法。

public class ImplementationClass implements Test{
    // Attributes
    // Constructor
    @Override
    public void print(){
        System.out.println("Overridden method called");
    }
}

我想知道如何访问接口中的原始默认方法。谢谢

共有1个答案

南门志
2023-03-14

您没有从接口重写/实现该方法。在接口中,方法是print某物(),在类中,它是print()。这意味着您刚刚向类中添加了一个不在接口中的新方法。此外,在print()上使用@Overide也会出错,因为@Overide应该用于重写超级类方法或从接口实现方法时。不强制使用此注释。但是使用它将使代码更具可读性,并且如果我们认为我们覆盖了正确的方法,也可以防止错误,但是没有(如果编译器在不在超类或接口中的方法上使用它,它将抛出一个错误)。

但我将告诉您如何访问接口的默认方法。您必须用类实现接口。然后为该类创建一个对象,并在此对象上调用该默认方法。当然,您可以选择重写实现类中的默认方法。

我只是在这里重写你的类,删除方法上的@Overide

public class ImplementationClass implements Test{
    public void print(){
        System.out.println("Overridden method called");
    }
}

// create an object for ImplementationClass and call the default method on
// the object.
ImplementationClass object = new ImplementationClass();
object.printSomething();
 类似资料:
  • 问题内容: 假设我正在构建一个井字游戏(因为它与结构非常相似),我希望结果在弹出窗口中显示,并带有一个新的游戏按钮,并且希望此弹出窗口允许我访问设置(另一个按钮)并对其进行更改,使其始终位于弹出窗口中,然后离开并最终将其关闭并开始新游戏。 我希望我可以保持秩序,因此有一个单独的弹出窗口类,可以在其中构建自定义弹出窗口。 显而易见,我将newgame方法和reset方法作为我的游戏网格类的方法。另一

  • 当您的系统里同时安装了 java 6 及 java 7 的时候,系统默认使用的 java 版本不一定是 java 7. 运行命令 java -version, 查看输出: 如果输出中显示 “java version “1.7.0_xx”, 那么您默认的 java 版本是 java 7. 您可以略过下面的步骤。 如果输出中显示 “java version “1.6.0_xx”, 那么您默认的 jav

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 由于某种原因,我有一个LinkedList类无法访问我的学生类方法。我不明白为什么会发生这种情况,因为我的linkedlist类是Student类型。我一直收到一个错误:找不到symbol symbol:method getName()位置:Student类型的变量数据,其中Student是一个类型变量:Student extends对象在类节点中声明。下面的方法来自我的链表类 getGpa是我的

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 问题内容: 我现在正在与其他人一起在grails项目中工作。我必须编写一些Java类。但是我需要访问使用groovy创建的可搜索对象。看来,该对象必须放在默认包中。 问题答案: 在J2SE 1.4之前,你可以使用以下语法从默认包中导入类: 这是不再允许。因此,要从打包的类中访问默认的包类,需要将默认的包类移动到自己的包中。 如果你可以访问groovy生成的源,则需要进行一些后期处理,以将文件移动到