当前位置:   article > 正文

接口中的默认方法和静态方法(五)_.net 5 接口中的静态方法

.net 5 接口中的静态方法
接口中的默认方法
接口默认方法的“超类优先” 原则


java8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论:

规则如下:

1.超类优先,如果超类提供了一个具体的方法,同名而且有相同的参数类型的默认方法会被忽略。

2.接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决。

1.当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。(超类优先原则)

  1. public class SubClass extends MyClass implements MyInterface{
  2. }
  1. public interface MyInterface {
  2. default String getName(){
  3. return "我是父类接口";
  4. }
  5. }
  1. public class MyClass {
  2. public String getName(){
  3. return "子类";
  4. }
  5. }
  6. SubClass subClass=new SubClass();
  7. System.out.println( subClass.getName());
  8. 子类

2.当实现的多个接口中有相同签名的方法(不论是否是默认参数)时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。(接口冲突)

  1. public class SubClass implements MyFun, MyInterface{
  2. @Override
  3. public String getName() {
  4. return MyInterface.super.getName();
  5. }
  6. }

  1. public interface MyFun {
  2. default String getName(){
  3. return "哈哈哈";
  4. }
  5. }
  1. public interface MyInterface {
  2. default String getName(){
  3. return "我是父类接口";
  4. }
  5. }

2.接口中的静态方法

  1. public interface MyInterface {
  2. default String getName(){
  3. return "我是父类接口";
  4. }
  5. public static void show(){
  6. System.out.println("接口中的静态方法");
  7. }
  8. }

调用:
   MyInterface.show();


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/438457
推荐阅读
相关标签
  

闽ICP备14008679号