从接触java开始,一直对接口和抽象类的概念有点模糊不清,在日常的应用中基本用的是方法的实现,于是就选择了接口,而很少用到抽象类,如今,有了空闲的时间了,在网上找了很多有关二者的资料,发现他们的不同之处,写了下来,和大家一起分享。
1.首先说下接口,我们在定义接口的时候就是直接以public interface Xxxo的形势来定义接口,然后在接口中以public void xxxx()形势来定义方法。其实在接口中的所有方法默认的都是抽象类型的,也就是说若是某个类要实现此接口,必须实现该接口中所有的方法,方法可以为空,但是要实现。而抽象类则不是这样的,其子类可以不完全继承,只要定义该类也为抽象类即可。接口中的变量默认的类型是public static final类型的。
2.抽象类可以有构造方法,而接口没有。
3.抽象类中有普通的成员变量,但是接口中的变量只能是public static final类型的。
4.抽象类中可以有非抽象的方法,而接口中的方法都是抽象的,类型是public abstract类型的。
5.抽象类中可以有静态的方法。
6.对于一个类,只能继承一个抽象类,但是可以实现多个方法。
7.抽象类中的方法类型不是单一的,可以为protect类型的,而接口中只能是public类型的
如下图所示:
若是定义成private类型的会自动提示我们只能为public类型的。
(有缺少或者不对的地方欢迎补充)