【发布时间】:2017-07-29 06:00:07
【问题描述】:
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 将其视为错误的原因是什么?
【问题讨论】:
-
静态方法被隐藏而不是被覆盖。
-
感谢您的解释。 @Code-Apprentice,你所说的“阴影而不被覆盖”是什么意思?编译器是否将静态和非静态方法视为两个完全不同的实体?即使他们有相同的签名?
-
下次试试之前的研究。
标签: java