抽象类与接口的区别
2023.2.16
首先先看抽象类和接口的定义:
抽象类:用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为父类使用
接口:是抽象方法的集合,声明了一系列的方法操作,如果一个类实现了一个接口,那么它必须实现这个接口的所有抽象方法
从定义中可以看出来:
- 抽象类和抽象方法没有绝对的关系,即抽象类中不一定要有抽象方法,有抽象方法不一定就是抽象类
- 在抽象类中,抽象方法不能被修饰为
private
(在java中被private修饰的方法只能在类中被调用,且重写方法不能给予比被重写方法更高的权限,抽象类不能被实例化,定义在抽象类中的被private修饰的抽象方法就没有了意义)
基于抽象类以及接口的特性,可以得出结论:
抽象类 | 接口 | |
---|---|---|
修饰符 | 不能被private修饰 | 只能被public修饰 |
构造方法 | 可以有构造方法 | 不能有构造方法 |
变量 | 允许带有普通变量 | 只能带有不可变常量 |
对比普通类 | 与普通java类的区别就是不可被实例化 | 和普通java类不是一个概念 |
子类或实现类 | 抽象子类可不完全实现父类的抽象方法 | 实现类必须全部实现接口的抽象方法 |
继承与实现 | 单继承 | 多实现 |
方法 | 允许有普通方法 | 必须都是抽象方法 |