Java接口中的静态方法和默认方法有什么区别?

新手上路,请多包涵

当我注意到您现在可以在接口中定义静态和默认方法时,我正在通过接口学习。

 public interface interfacesample2 {
    public static void method() {
        System.out.println("hello world");
    }

    public default void menthod3() {
        System.out.println("default print");
    }
}

请解释两者的区别,如果有一个我们何时使用它的例子,那就太好了。对接口有点困惑。

原文由 Vipin Menon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 507
1 个回答

Java 8 中静态方法和默认方法的区别:

1)默认方法 可以在实现类时被 覆盖,而静态 方法不能

2)静态方法 属于接口类,所以只能在接口类上调用静态方法,不能在实现该接口的类上调用,参见:

 public interface MyInterface {
    default void defaultMethod(){
        System.out.println("Default");
    }

    static void staticMethod(){
        System.out.println("Static");
    }
}

public class MyClass implements MyInterface {

    public static void main(String[] args) {

        MyClass.staticMethod(); //not valid - static method may be invoked on containing interface class only
        MyInterface.staticMethod(); //valid
    }
}

3)类和接口 都可以有 同名的静态方法,并且都不会覆盖其他的!

 public class MyClass implements MyInterface {

    public static void main(String[] args) {

        //both are valid and have different behaviour
        MyClass.staticMethod();
        MyInterface.staticMethod();
    }

    static void staticMethod(){
        System.out.println("another static..");
    }
}

原文由 stinger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题