接口和抽象类是面向编程中的两个重要的概念,你是否完全弄明白了呢?
接口和抽象类的区别
抽象类有哪些特性?
1、抽象类只能被继承,不能被实例化。也就是说不能使用new关键字来实例化一个抽象类
2、抽象类可以有属性和方法,其中方法可以实现,可以不实现,不实现的方法被称之为抽象方法,使用abstract关键字修饰
3、子类继承抽象类,必须实现所有的抽象方法
接口有哪些特性?
1、接口中不能包含属性,也就是成员变量
2、接口中只能声明方法,方法不能包含实现代码。(使用default和static修饰的方法例外,这是java8添加的新特性)
3、实现类实现接口,必须实现接口中的所有方法。
抽象类的作用?
抽象类主要解决的代码复用的问题
接口的作用?
接口相比于抽象类,更加侧重于解耦,提高代码的可扩展性。
什么时候使用接口,什么时候使用抽象类?
这个判断的标准比较简单,如果是is-a关系,且解决的是代码复用问题,使用抽象类
如果是has-a关系,解决的抽象而非代码复用问题,使用接口
从类的继承层次来看,抽象类是一个自下而上的过程,先有代码的复用,然后再抽象为一个父类(也就是抽象类)。而接口正好相反,是一个自上而下的过程,在编程的时候,一般都是先设计接口,再去考虑如何实现接口
参考:设计模式之美-王争