当前位置: 移动技术网 > IT编程>开发语言>Java > 乐字节-Java8新特性-接口默认方法

乐字节-Java8新特性-接口默认方法

2019年04月04日  | 移动技术网IT编程  | 我要评论

总概

java8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本。其中包括语言、编译器、库、工具和jvm等诸多方面的新特性。

java8 新特性列表如下:

  • 接口默认方法
  • 函数式接口
  • lambda 表达式
  • 方法引用
  • stream
  • optional 类
  • date api
  • base64
  • 重复注解与类型注解

接下来乐字节将会带大家一一讲以上java8新特性详细讲解,作为java8新特性系列文章连载。

 

一、借口默认方法

1、什么是接口默认方法


从java8开始,程序允许在接口中包含带有具体实现的方法,使用default修饰,这类方法就是默认方法。默认方法在接口中可以添加多个,并且java8提供了很多对应的接口默认方法。


2、设计接口默认方法好处


使用接口编程的好处是,开发是面向抽象而不再是面向具体来编程,使得程序变得很灵活,缺陷是,当需要修改接口时候,此时对应需要修改全部实现该接口的类,举个例子, java 8 之前对于我们常用的集合框架没有 foreach 方法,通常能想到的解决办法是在jdk里给相关的接口添加新的方法及实现。从java8开始,引入了接口默认方法,这样的好处也是很明显的,首先解决了java8以前版本接口兼容性问题,同时对于我们以后的程序开发,也可以在接口子类中直接使用接口默认方法,而不再需要再各个子类中各自实现响应接口方法。


3、默认方法编写


jdk8中接口可以包含实现方法,需要使用default修饰,此类方法称为默认方法。默认方法在接口中必须提供实现,在实现类中可以按需重写。默认方法只能在实现类中或通过实现类对象调用。注意:当多个父接口中存在相同的默认方法时,子类中以就近原则继承。

public interface imathoperation {
    /**
     * 定义接口默认方法 支持方法形参
     */
    default void print(){
        system.out.println("这是数值运算基本接口。。。");
    }
}

  


4、静态方法


静态方法即通过static 修饰的方法。接口中静态方法页也必须实现,提供了可以直接通过接口调用方法的方式。

public interface imathoperation {
    /**
     * 定义接口默认方法 支持方法形参
     */
    default void print(){
        system.out.println("这是数值运算基本接口。。。");
    }

     /**
     * 定义静态默认方法
     */
    static void version(){
        system.out.println("这是1.0版简易计算器");
    }    
}

  


5、接口默认方法使用

5.1 定义imathoperation 接口 并提供默认打印方法

 public interface imathoperation {

  /**
   * 定义接口默认方法 支持方法形参
   */
  default void print(){
      system.out.println("这是数值运算基本接口。。。");
  }

   /**
   * 定义静态默认方法
   */
  static void version(){
      system.out.println("这是1.0版简易计算器");
  }

  /**
   * 整数加法运算方法
   * @param a
   * @param b
   * @return
   */
  public int add(int a,int b);
  }

  

 

5.2 子类实现

定义mathoperationimpl子类 实现imathoperation 接口


这里可以看到,在实现imathoperation 接口时可以选择实现 ( 也可以不实现 ,在子类方法中直接使用 ) 接口默认方法。

public class mathoperationimpl implements  imathoperation {
    @override
    public int add(int a, int b) {
        // 子类中可以直接调用父类接口默认方法
        imathoperation.super.print();
        // 调用父类静态默认方法
        imathoperation.version();
        return a+b;
    }
}

  


5.3 多个默认方法情况


使用java8开发应用程序,子类实现多个接口时,对于接口默认方法定义可能会出现多个默认方法,并且接口默认方法可能会出现同名情况,此时对于子类在实现或者调用时通常遵循以下原则:
1.类中的方法优先级最高
2.如果第一条无法进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果b继承了a,那么b就比a更加具体


示例代码如下:

/**
 * 定义手机接口  提供默认info方法
 */
public interface phone {
    default void info(){
        system.out.println("这是一部手机");
    }
}


/**
 * 定义miphone子接口 并继承 phone 父接口 同时也提供info方法
 */
public interface miphone extends phone{
    default void info(){
        system.out.println("这是一部小米手机");
    }
}


/**
 * 实现 phone miphone 接口
 */
public class m2sphone implements phone,miphone {

    public static void main(string[] args) {
        new m2sphone().info();
    }
}

  

 

打印结果:

这是一部小米手机

 

这是乐字节java8新特性连载之一,后面还有之二,之三,欢迎关注。欢迎转载,但请注明文章出处

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网