java静态方法与默认方法灵活定义接口

1.默认方法与静态方法
java 8中的接口现在支持在声明方法的同时提供实现,通过两种方式可以完成这种操作。

  • Java 8允许在接口内声明静态方法。

  • Java 8引入了一个新功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。

    • 实现接口的子类如果不显式地提供该方法的具体实现,就会自动继承默认的实现。
      这种机制可以使你平滑地进行接口的优化和演进。

    • 静态方法及接口:

    • 同时定义接口以及工具辅助类(companion class)是Java语言常用的一种模式,工具类定义了与接口实例协作的很多静态方法。

    • 比如,Collections就是处理Collection对象的辅助类。

  • 由于静态方法可以存在于接口内部,你代码中的这些辅助类就没有了存在的必要,你可以把这些静态方法转移到接口内部。为了保持后向的兼容性,这些类依然会存在于Java应用程序的接口之中。

  • 默认方法

  • 接口包含的方法签名在它的实现类中也可以不提供实现

  • 缺失的方法实现会作为接口的一部分由实现类继承(所以命名为默认实现),而无需由实现类提供。
    默认方法由default修饰符修饰,并像类中声明的其他方法一样包含方法体。

    2.解决命名冲突规则

如果一个类使用相同的函数签名从多个地方(比如另一个类或接口)继承了方法,通过三条规则可以进行判断:

1)类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。
2)如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。
3)最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,显式地选择使用哪一个默认方法的实现。
##这是一些具备默认方法、静态方法的接口
```java
package com.java.day01;

  import java.util.Arrays;
  import java.util.Comparator;
  import java.util.List;
  
  interface A1{
  	int num = 10;
  }
  
  abstract class B1{
  	private String name;
  	private int age;
  }
  
  interface Compute{
  	public double add(double a,double b);
  	
  	public static double sqrt1(double num){
  		return Math.sqrt(num);
  	}
 //	 //默认方法,含有 default修饰符
  	public default double sqrt2(double num){
  		return Math.sqrt(num);
  	}
  }
  
  class ComputeImpl implements Compute{
  
  	@Override
  	public double add(double a, double b) {
  		return a + b;
  	}
  	
  }
  
  public class InterfaceTest {
  	public static void main(String[] args) {
  		Compute c = new ComputeImpl();
  		System.out.println(c.add(10.5, 5.5));
  		
  		System.out.println(Compute.sqrt1(4));
  		System.out.println(c.sqrt2(16));

  		List<Integer> numbers = Arrays.asList(3,8,2,5,7,1);
  		numbers.sort(Comparator.naturalOrder());
  		System.out.println(numbers);
  	}
  }
  
  
  ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值