抽象类和接口的区别
1.抽象类
- 使用abstract修饰,抽象类中不能实例化,抽象类必须被子类继承后才能使用。所以抽象类不能使用final或者private或者static修饰。final修饰的方法不能被覆盖,private是因为不能继承到子类,也就不能覆盖,而static可以覆盖,但是调用时会调用编译时类型的方法,因为调用的是父类的静态方法,而父类的方法又是抽象的方法,又不能调用,所以不能使用。
- 抽象类中的方法可以不是抽象方法,但如果抽象类中的方法为抽象方法,子类继承时一定要实现全部的抽象方法
- 抽象方法没有方法体,如果一个类中含有抽象方法,那这个类一定是抽象类。
- abstract不能用来修饰属性或者局部变量。
- 一个类只能继承一个抽象方法。
2.接口
- 接口中的全部方法默认为public abstract,因此,接口可以看成抽象类的一种特例。
- 接口使用interface关键字修饰,接口不能被实例化
- 继承接口要实现接口的全部抽象方法。
- 一个类可以继承多个接口
3.抽象类和接口的区别
区别 | 抽象类 | 接口 |
---|---|---|
构造方法 | 有 | 没有 |
普通成员变量 | 有 | 没有 |
非抽象的普通方法 | 有 | 没有 |
抽象方法的访问类型 | public/protected | public |
静态方法 | 有 | 没有 |
静态成员变量 | 有 ,访问类型任意 | 访问类型默认为public static final |
继承个数 | 继承一个抽象类 | 实现多个接口 |