package chap8;
interface Interfaces
{
void nMethod(); // normal method of interface
default void dMethod() // default method of interface
{ System.out.println("Default Method of Interface"); }
static void sMethod() // static method of interface
{ System.out.println(" static method of interface"); }
}
class IClass implements Interfaces
{
public void nMethod()
{ System.out.println("Normal Method of Interface in IClass ");}
static void sMethod()
{ System.out.println("Does function overrided ?");}
public void dMethod()
{ System.out.println("default Method of Interface in IClass ");}
}
class MainClass
{
public static void main(String args[])
{
IClass ob =new IClass();
ob.nMethod();
ob.sMethod(); // overrided method ??
ob.dMethod();
// calling static
//Interfaces.sMethod // via Interfaces
// IClass.sMethod(); // via IClass (why all these sMethod calling showing error)
}
}
问题:a) 接口(interface)中声明的 sMethod 是否被 IClass 中存在的 sMethod 覆盖?
b) 为什么我无法通过 Interface 和 IClass 调用 sMethod?
感谢 fpr 的帮助!!!
最佳答案
请参阅 default methods 上的 Oracle 文档和静态方法。
扩展包含默认方法的接口(interface)
当您扩展包含默认方法的接口(interface)时,您可以执行以下操作:
- 完全不提及默认方法,这可以让您的扩展接口(interface)继承默认方法。
- 重新声明默认方法,使其变得抽象。
- 重新定义默认方法并覆盖它。
关于您的疑问:
- 如果您将这些概念应用到您的示例中,您的
dMethod
就会在IClass
中被覆盖
IClass
中的sMethod()
隐藏了Interfaces
中的sMethod()
关于Java :Interface Method's Overriding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734407/