Java8新特性
- Java8接口可添加默认实现
- 接口和抽象类的区别
- 设计模式:缺省适配模式
Java8接口可添加默认实现
java8新增了接口默认实现功能,每个接口可以有默认实现,实现类可以根据其需要进行定制化得实现
抽象方法前面添加default关键字即可,代表该方法有默认实现。
public interface UserService {
String say();
default void Hello(){
System.out.println("this is interface Hello()");
};
}
@Service
public class UserServiceImpls implements UserService {
//必须实现
@Override
public String say() {
return "null";
}
//可选实现
@Override
public void Hello() {
System.out.println("this is implements Hello()");
}
}
接口和抽象类的区别
在看视频学习源码时候突然对接口和抽象类比较模糊抓紧巩固起来
自java8后有了一个区别,就是上边的默认实现。
序号 | 接口 | 抽象类 |
1 | 定义抽象行为,由类去实现具体行为。如人都要吃饭,但是不同种族的人吃法不同 | 即可直接定义具体行为,也可以定义抽象行为。具体行为如人都要上WC这是统一行为。 |
2 | 只能定义抽象方法,java8后可提供默认实现 | 可以定义抽象方法,也可以定义普通方法 |
3 | 通过实现类implements来实现具体的方法。扩展性强,因为一个类可以实现多个接口,对于功能的扩展十分方便。 | 抽象的方法通过子类extends来实现该方法。扩展性不强,因为一个类只能继承自一个父类。(hava one father) |
4 | 实现类型较多可多实现 | 子类类型单一,因为单继承 |
5 | 直接定义即可 | 抽象方法必须用abstract修饰。为继承而存在,其子类必须实现其abstract方法描述的抽象方法 |
补充:个人理解:抽象类用于构建一个具备某些相同行为以及不同行为的对象,其中不同的行为用抽象方法表示出来,待子类进行定制化的实现即可。
设计模式:缺省适配模式
声明类型的工作仍然由Java接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。(A extends AbstractB implements interfaceC,那么A即可以选择实现(@Override)接口interfaceC中的方法,也可以选择不实现;A即可以选择实现(@Override)抽象类AbstractB中的方法,也可以选择不实现)