龙空技术网

JDK8新特性之接口默认方法与静态方法,反设计模式……

Java技术栈 365

前言:

当前兄弟们对“静态方法能不能被继承”大约比较讲究,大家都想要知道一些“静态方法能不能被继承”的相关资讯。那么小编同时在网上网罗了一些有关“静态方法能不能被继承””的相关内容,希望你们能喜欢,我们一起来了解一下吧!

接口默认方法与静态方法

有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题。

接口静态方法类似于默认方法,但是我们不能在实现类中覆盖它们,可以避免默认方法在实现类中被覆盖实现。

之前讲过的JDK8的list.foreache方法,看下源码,其实也是java.lang.Iterable接口的默认方法。

defaultvoidforEach(Consumer<?superT>action){Objects.requireNonNull(action);for(Tt:this){action.accept(t);}}

简单的例子

默认方法以default修饰,静态方法用static。

publicstaticvoidmain(String[]args){IUserInterfaceuserInterface=newUserServiceImpl();System.out.println(userInterface.getDefaultUser1());System.out.println(IUserInterface.getDefaultUser2());}interfaceIUserInterface{defaultUsergetDefaultUser1(){returnnewUser("Susan1",11);}staticUsergetDefaultUser2(){returnnewUser("Susan2",22);}}staticclassUserServiceImplimplementsIUserInterface{}

注意要点

1、接口默认方法、静态方法可以有多个。

2、默认方法通过实例调用,静态方法通过接口名调用。

3、default默认方法关键字只能用在接口中。

4、默认方法可以被继承,如果继承了多个接口,多个接口都定义了多个同样的默认方法,实现类需要重写默认方法不然会报错。

5、静态方法不能被继承及覆盖,所以只被具体所在的接口调用。

推荐书籍

Spring Cloud微服务实战

JavaEE开发的颠覆者 Spring Boot实战

SpringBoot揭秘 快速构建微服务体系

SpringBoot实战

精通Spring+4.x++企业应用开发实战

2017年,Java程序猿10本经典好书推荐

获取所有高清电子书下载请到274435854群。

看完有没有收获?分享到朋友圈给更多的人吧。

架构之路,头条精选,每天一篇干货,喜欢就收藏+关注吧!

标签: #静态方法能不能被继承