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将此视为错误的原因是什么?
答案 0 :(得分:3)
在没有相关类/接口的实例的情况下调用static
方法。通常它们是实用方法。
要在相关接口的实例上调用default
方法。除非被覆盖,否则此接口的所有实现都将具有此方法定义。
这两个术语不允许在一起的原因仅仅是因为它们相互矛盾:default
需要一个对象,static
不需要任何对象。
答案 1 :(得分:0)
TestClass.show()
和TestClass.square()
不是static
,因此不会覆盖界面中的static
方法。它们是成员方法,需要一个对象来调用它们。另一方面,接口中具有相同名称的方法是static
,因此您可以使用没有对象的接口名称或类名称来调用它们。