什么是 default 方法

885 total views, 6 views today

Java 设计者希望能在 List 上提供一个 forEach 方法,例如可以
list.forEach(System.out::println)
而 List<E> 实现自 Collection<E>,Collection<E> 实现自 Iterable<E>
如果 Collection 接口定义了 forEach 方法,那么所有实现了 Collection<E> 接口的子类都必须要实现一遍 forEach 方法,这会引发新老代码的兼容问题。

基于这种场景,出现了 default 方法。default 方法在接口中定义了一个实现,因此,继承者可以不需要再实现它了。实现该接口的类都能直接调用这个 default 方法。

当然,硬是要去实现他也是可以的,必须加上@Override 标注,例如:
Iterable<T> 接口中就定义了如下的 forEach 默认方法。

如果一个类,实现了 2 个接口,而这 2 个接口都有一个 default 方法,并且方法签名也相同,那么就会导致冲突。这个类在运行这个方法的时候,不知道该去调用哪个接口里的逻辑。
比如下面的代码。
接口 1

 

接口 2

类继承了接口 1 和接口 2

 

此时会编译报错,必须要显示的解决冲突,指定 dosomething 的逻辑。通常,如果需要按 myInterface 中的默认方法运行,只需要如下写就可以了。

当然,既不按 myInterface 也不按 myInterface2 也是可以的,由调用者决定如何实现该方法。

原创文章,转载请注明出处!http://www.javathings.top/什么是default方法/

About: wusq


发表评论

邮箱地址不会被公开。 必填项已用*标注