这篇文章主要介绍了简单了解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的默认和静态方法