接口定义的是方法的一些规范,而抽象类定义的是类的模板。
接口中只能声明方法,但是不能定义具体的方法
抽象类中可以声明抽象方法,但是同时也可以具体去实现一些方法,但是抽象类不能被实例化
所以如果你想对类的方法定义一些规范的同时,也想赋予这个类一些具体实现方法,那么就用抽象。
如果你只想定义一个类的规范,那就用接口
- 抽象:定义类的规范,赋予具体实现方法
- 接口:定义类的规范
相同
- 抽象类和接口都有抽象方法
- 抽象类和接口都不能实例化
- 抽象类和接口的使用意义(即作用)相同
区别
- 抽象类的子类遵循继承原则,只能有一个父类;但一个类可以实现多个接口
- 抽象类中可以有非抽象的已经实现的方法;接口中全是抽象的方法,都是方法定义
- 抽象类中方法和变量的访问控制自己定义;接口中只能是公共的
抽象类可以作为基类,为子类提供公共方法,并定制公共的抽象让子类来实现。
而接口则是更高层次的抽象,它可以让我们依赖于抽象而不是具体的实现,为软件开发带来更多的扩展性。
接口
- 对接口的使用是通过关键字 implements
- 接口只能定义常量
- 子类必须实现接口定义的所有方法
- 接口只能定义不能实现该方法
- 接口没有构造函数
- 接口中的方法和实现它的类默认都是public类型的
- 接口是一种特殊的抽象类
抽象类
- 对抽象类的使用是通过关键字extends
- 不能被实例化,可定义子类必须实现的方法
- 子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类一样
- 如果一个类中有一个抽象方法,则该类必须定义为抽象类
- 抽象类可以有构造函数,但是不能被实例化
- 抽象类中那个的方法可以使用private,protected,pubic来修饰
- 一个类可以同时实现多个接口,但一个类只能继承一个抽象类
抽象类的作用:就是严格要求子类的结构,所以抽象类其实就是一个规范。
总结
掌握好接口的设计原则,往往就能看懂一大半的框架的设计思想。这也是我们面向对象中最最基础的特性。
抽象类作为公共基类来说可以为多态提供比较好的范本,它能够让你的子类有自己的个性又能使用父类的能力。
总之,深入场景业务,选择合适的方式实现代码,靠的是能力、经验与智慧的综合,决不是一句谁好谁不好所能定性的。