Java中接口的静态方法

时间:2017-07-29 06:00:07

标签: 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将此视为错误的原因是什么?

2 个答案:

答案 0 :(得分:3)

在没有相关类/接口的实例的情况下调用static方法。通常它们是实用方法。

要在相关接口的实例上调用default方法。除非被覆盖,否则此接口的所有实现都将具有此方法定义。

这两个术语不允许在一起的原因仅仅是因为它们相互矛盾:default需要一个对象,static不需要任何对象。

答案 1 :(得分:0)

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