java - Java 接口(interface)中的静态方法

标签 java

 interface TestInterface
 {
    public static void square(int a)
    {
        System.out.println("Square is "+a*a);
    }

    public static  void show()
    {
        System.out.println("Default Method Executed");
    }

 }
class TestClass implements TestInterface
{
    public void square(int a)
    {
        System.out.println(a*a);
    }

    public void show()
    {
        System.out.println("Overridden Method");
    }
    public static void main(String args[])
    {
        TestClass d=new TestClass();
        d.square(4);
        TestInterface.square(4);
        TestInterface.show();
        d.show();
    }
}

我对我的代码有疑问。我了解到静态方法在JAVA中不能被覆盖,但它在这里似乎工作得很好。 当我同时给出默认关键字和静态关键字时,就像这样

interface TestInterface
   {
        default static void square(int a)
        {
            System.out.println("Square is "+a*a);
        }

        public static  void show()
        {
            System.out.println("Default Method Executed");
        }

    }

出现如下错误: 修饰符的非法组合:静态和默认

JAVA 将此视为错误的原因是什么?

最佳答案

静态方法意味着在没有相关类/接口(interface)实例的情况下调用。通常它们是实用方法。

default 方法旨在在相关接口(interface)的实例上调用。该接口(interface)的所有实现都将具有该方法定义,除非它被重写。

这两个术语不允许一起使用的原因很简单,因为它们相互矛盾:default 需要一个对象,static 不需要对象。

关于java - Java 接口(interface)中的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45385858/

相关文章:

java - 用括号中的技巧将除法值加倍

java - 简单的 if 语句似乎没有执行代码的某些部分

java - 在 Eclipse 中编写 Java 类时,是否可以插入指向网页的 URL 超链接?

java - JPA - 如何访问查询元数据?

java - 双向映射情况下如何在 spring-data-jpa 中删除

java - 将映射映射到包含名称和值参数的对象列表

java - 在 Ubuntu 中安装 Oracle WebLogic Server 12.2.1.4

java - 将 xml 节点的所有内容作为字符串获取

带空格的 Java 字符串填充

java - Spring 启动。执行 saveAndFlush 并修改实体结果为未保存的 transient 异常