接口和抽象类的区别

是什么?

  • Interface:
    接口是一种行为的抽象。但是现在无论是接口还是抽象类,感觉都已经脱离了本来的这种定义。而主要用来解耦了。例如dao层就是一系列的接口,那么数据库实现就可以随时改动。
  • 抽象类
    抽象类是对象的抽象。使用较少。因为子类只能单一继承抽象类,大大限制了灵活性。

为什么?

  • 上面说了,无论接口和抽象类,都已经被用来解耦了。除了dao层之外,例如Service层也要使用接口。事实上,这不是一定的。试想,我不可以直接改动实现类吗?的确,无意义的使用接口还不如不用。接口此时的作用,第一是对service层的说明。开发中可不是你自己一个人包揽一个项目,此时接口也成为了一个说明书,说明实现类的入参、出参、功能,再加上对功能的合理划分,就能使得每一个接口简单易懂,易维护。第二,就是解耦。接口的良好定义会强迫你去把不同的服务实现,即使只是一个简单的功能。例如登录过程中发送验证码,这是一个简单的功能,于是你就直接写在了登录服务里,那么之后要改动验证码的功能,是不是还要去登录里改?如果进行隐私操作时,需要验证码,你是不是还要重新写一次验证码验证?第三,就是对外暴露服务。比如在开发controller层时,还没有想好服务层的实现,不要紧,在接口中写一个就好了,之后再进行实现。此外,例如dubbo,微服务,已经不只是传统的三层架构了,更是把服务进行了更彻底的解耦,这时候更需要接口来对外规定服务的使用和名称。

怎么用?

  • 接口
    可以看到,接口常量是默认且不可更改的使用了staic final public修饰的。且不可定义变量。方法不可以带上实现体。
    image
    此外,接口的另外一种适用使用方法:
    	public void contextLoads() {
    	Fly fly = new Fly() {
    		@Override
    		public void print1() {
    		//实现
    		}
    
    		@Override
    		public void print2() {
    		//实现
    		}
    	};
    }
    
  • 抽次类
    抽象类则和普通的类无差别,主要是对象关系上的抽象is a
    image
posted @ 2021-08-22 10:35  快乐的海盗  阅读(74)  评论(0编辑  收藏  举报