Java接口默认实现、接口和抽象类区别

  • Post author:
  • Post category:java

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中的方法,也可以选择不实现)

该处描述转载至:https://blog.csdn.net/xw13106209/article/details/6923556


版权声明:本文为weixin_45466462原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。