简单了解Java的默认和静态方法

  

这篇文章主要介绍了简单了解Java的默认和静态方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

<强>浅谈Java的默认和静态方法
  

  

允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性。存在即合理,两者的出现,让接口越来越像抽象类,那么它们为什么出现呢,它们的出现产生了哪些便利,Java小白开始学习并总结,不足之处,还望评论区指点一二!

  

<强> Java新增默认方法有啥用
  

  

官方解答:默认方法允许您添加新的功能到现有库的接口中,并能确保与采用旧版本接口编写的代码的二进制兼容性。
  这个光看枯燥的介绍好像很难理解,举个简单的例子。假设有一个很大很大的项目,一个接口被很多很多的类所实现,大家都平安无事平稳地运行着。突然有一天,出现了一个小小地问题,或者说有一个更好的优化方案,需要在这些实现类去增加。在默认方法出现之前,只有抽象方法,且需要在实现类中给出具体定义才能操作,那岂不是只能两眼一闭,直接从早干到晚地添加啦。
  

  

但是,默认方法地出现允许在接口中给出方法的具体实现,且实现类中能够自动实现默认方法,我只需要将这个优化放在接口的默认方法里面,就能完成对所有实现类的优化啦。当然,纯属个人理解,如果我的例子有不恰当的地方,欢迎指正哦。

        包com.my.pac21;/* *   * @auther Summerday   */接口可闭{   空白close ();//假设是新增的默认方法   默认空makeSound () {   System.out.println(“彭!”);   }   }      界面能开的{   默认空makeSound () {   System.out.println(“彭!”);   }   }      类窗口实现可闭{      @Override   公共空间close () {   System.out.println (“Window.close”);   }   }      公共类门实现可闭,能开的{      @Override   公共空间close () {   System.out.println (“Door.close”);   }//两个接口中包含同名的方法,需要重写,指定一个   @Override   公共空间makeSound () {   system . out。println(“需要覆盖默认的方法”);   }      公共静态void main (String [] args) {   可闭cw=新窗口();   门可闭cd=new ();//Window.close cw.close ();//Door.close cd.close ();//实现默认方法   彭cw.makeSound ();//!   cd.makeSound();//需要覆盖默认的方法   }   }      

<强> Java新增的静态方法有啥用
  

  

默认方法和静态方法的在接口的出现让接口失去“全是抽象方法”的特性,在探究完新增的默认方法之后,我们该对静态方法下手啦。开始疯狂查找资料…

  
  

Java 8成为可能之前在接口中声明静态方法,常见的做法是把这些方法在同伴实用工具类。例如,java.util。java.util集合类是一个伴侣。收藏界面,并声明的静态方法,可能更合适在Java集合框架相关的接口。你不再需要提供自己的同伴实用工具类。相反,您可以将静态方法在适当的接口,这是一个好习惯培养。

     

这个是我在堆栈溢出上找到的答案,什么意思呢,在没有新增静态方法之前,我们如果想让一些固定的操作在接口中出现,就必须定义一个和接口配套的实现类。而接口中静态方法的出现,可以直接通过接口调用静态方法。

        包com.my.pac21;/* *   * @auther Summerday   */公共类测试{   公共静态void main (String [] args) {   int val1=5;   int val2=6;//通过创建实现类的对象   可数b=new CountableCompanion ();   System.out.println (b。getNum (val1, val2));//直接通过接口调用   Countable.getMul (val1, val2);   }   }   接口可数{//普通抽象方法   int getNum (int, int b);//静态方法   静态int getMul (int, int b) {   返回一个* b;   }   }//实现接口的实现类   类CountableCompanion实现可数{   @Override   公共int getNum (int, int b) {   返回一个+ b;   }   }      

这是一个我自认为还比较幼稚的例子,仅供理解。

  

普通抽象方法的情况:我在接口中定义了一个抽象方法,而后我又定义了实现该方法的实现类,最后通过创建实现类的实例来调用该方法,最后算得两值之和。可以想象,在实际中,如果相同性质的方法想要在多个实现类中实现,这种做法是比较麻烦的。

简单了解Java的默认和静态方法