Java接口中的静态方法

Java接口中的静态方法,java,Java,我对我的密码有疑问。我了解到在JAVA中不能重写静态方法,但在这里它似乎工作得很好。 当我同时给出默认关键字和静态关键字时,如下所示 interface TestInterface { public static void square(int a) { System.out.println("Square is "+a*a); } public static void show() { System.out.pri

我对我的密码有疑问。我了解到在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将此视为错误的原因是什么?

调用
静态
方法时不需要相关类/接口的实例。通常,它们是实用方法

default
方法意味着在相关接口的实例上调用。此接口的所有实现都将具有此方法定义,除非它被重写


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

调用
static
方法时不需要相关类/接口的实例。通常,它们是实用方法

default
方法意味着在相关接口的实例上调用。此接口的所有实现都将具有此方法定义,除非它被重写


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

TestClass.show()
TestClass.square()
不是
静态的
,因此不要覆盖界面中的
静态
方法。它们是成员方法,需要对象来调用它们。另一方面,接口中具有相同名称的方法是静态的,因此您可以使用接口名或类名调用它们,而不使用对象。

TestClass.show()
TestClass.square()
不是
静态的
,因此不要覆盖界面中的
静态
方法。它们是成员方法,需要对象来调用它们。另一方面,接口中具有相同名称的方法是
静态的
,因此您可以在没有对象的情况下使用接口名或类名调用它们。

静态方法被隐藏而不是重写。感谢您的解释@代码学徒,你所说的“隐藏而非覆盖”是什么意思?编译器是否将静态和非静态方法视为两个完全不同的实体?即使它们具有相同的签名?下次尝试之前的研究内容。静态方法被隐藏而不是覆盖。谢谢您的解释@代码学徒,你所说的“隐藏而非覆盖”是什么意思?编译器是否将静态和非静态方法视为两个完全不同的实体?即使他们有相同的签名?下次尝试之前的研究。谢谢你的帮助。澄清我的疑问:)谢谢你的帮助。澄清了我的疑问:)谢谢你的帮助。它解决了我的疑问:)谢谢你的帮助。它解决了我的疑问:)
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");
        }

    }