概述
java8被发布出来已经很长的一段时间了,但是一直没有关注过他的新特性。最近了解一下java8在inteface接口上的新特性。
在java8之前,接口interface是不许与有方法体的方法出现的,所有的方法是需要被实现的,但是java8之后可以使用关键字default和static在接口中定义有方法体的方法,分别为默认方法和静态方法。
static方法
和想象中的一样,static方法就类似与普通的静态方法,也是通过类名方法名进行调用的。
package org.loulan.study.java8.interfaces.function;
/*********************************************************
** Description: 据说java8的接口可以使用方法体,但是需要关键字default或者static
** <br><br>
** Date: Created in 2020/6/29 18:35
** @author 楼兰
** @version 0.0.0
*********************************************************/
public interface User extends People,Person {
/**
* Description :使用关键字static可以在接口中定义方法体
* 可以定义N多个静态方法,静态方法不属于属于类对象,是无法继承的。
* @param
* @return
* @exception
* @author :loulan
* */
public static String play() {
return "我玩了-User";
}
}
调用方式:
User.play();
实现接口是不会继承接口中的静态方法的
default方法
关于这个java8为什么要增加这个default方法我是不太明白的,但是根据百度了解的信息是:java类库比较庞大,如果对类进行新功能的添加,那么需要对底层的类进行一个一个添加方法。工程量庞大且容易出现错误,所以接口添加一个方法之后那么实现接口的类就可以使用这个些方法就简单多了,所以这个方法也被叫做默认方法,或者扩展方法。
比如只要在Collection接口中添加默认的方法stream(),那么他的字类List等就可以使用这个方法了,不需要去子类中一个一个的添加方法。
package org.loulan.study.java8.interfaces.function;
/*********************************************************
** Description: 据说java8的接口可以使用方法体,但是需要关键字default或者static
** <br><br>
** Date: Created in 2020/6/29 18:35
** @author 楼兰
** @version 0.0.0
*********************************************************/
public interface User extends People,Person {
/**
* Description :使用关键字default可以在接口中定义方法体
* 可以定义n多个default关键修改的方法
* 0. 接口中的对象方法必须使用default关键字进行修饰
* 1. 当接口实现多继承,有方法发生冲突那么该方法必须重写
* @param
* @return
* @exception
* @author :loulan
* */
public default String eat() {
return "我吃了-User";
}
}
我们都知道,java中只有接口可以进行多实现,是因为接口没有方法体,即使发生了冲突也是没有关系的,因为是没有方法体的。当时现在接口突然有了方法体,那么这多继承的冲突是怎么解决的呢?
其实解决也是比较简单的,就是如果发生了冲突,那么发生冲突的方法必须进行重写。