JAVA接口与抽象类辨析

抽象类

  • 抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
  • 抽象方法必须由子类来进行重写
  • 只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
  • 抽象类中可以包含具体的(非抽象)方法,当然也可以不包含抽象方法。
  • 子类中的抽象方法不能与父类的抽象方法同名。抽象方法可以继承抽象方法
  • abstract不能与final并列修饰同一个类。
  • abstract不能与private、static、final或native并列修饰同一个方法。即abstract只能用publicprotected来修饰
  • 抽象方法指的是没有大括号以及其中包含的内容的方法。

接口

  • 接口是一种比抽象类更加抽象的“类”,不过它并不是类,因为它也不能实例化。
  • 实现类指的是implement该接口的类
  • 实现该接口的实现类必须实现该接口的所有方法
  • 实现类表示着“interface只是它的外貌,但是现在需要声明它是如何工作的”
  • 接口只能用public来修饰,在未标明的时候也为public,若表明为其他的访问权限则会编译出错
  • 接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是没有实现的,需注意此处的方法虽然形似抽象方法,但是这并不需要abstract来修饰,这与抽象类中的抽象方法有所不同。在某种程度上来说,接口是抽象类的特殊化。

抽象类与接口

  区别:一个类只能存在一个父类,但是可以存在多个接口;抽象类表示的是"is-a"关系,接口表示的是"like-a"关系;抽象类是对类抽象,而接口是对行为的抽象;抽象类是自底向上抽象而来的,接口是自顶向下设计出来的(比如对于猫狗这些动物们来说,他们都是动物,因此他们的抽象类就是动物。他们的抽象类是因为在设计中需要他们的存在才被抽象出来的,是因为有猫和狗才有了动物这一抽象类。而对于他们的接口而言,我们知道有猫和狗之前,我们就已知有跑,跳,飞这些行为的存在了,在设计这些行为(接口)的时候,我们根本不知道会有什么样的类来怎样具体的实现这些方法)。

  共性:抽象类和接口都不能被实例化,抽象类只能在继承它的类中被实例化,接口只能在它的实现类中被实例化d

实例

  参考reference里的代码

Reference

  Java提高篇(05)--抽象类与接口 - Java 技术驿站 (archive.md)

上一篇:抽象类与接口


下一篇:抽象类