抽象类(abstract class)与接口(interface)的异同

来源:互联网 发布:asp.net php学那个好 编辑:程序博客网 时间:2024/05/18 00:37

抽象类:包含抽象方法的类就是抽象类
接口:指抽象方法的集合,方法不包含方法体

相同点:

  1. 都不能被实例化
  2. 接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化

不同点:

  1. 接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽象类中实现
  2. 接口要实现,抽象类要继承,一个类可以实现多个接口,但只能继承一个抽象类
  3. 接口强调设计理念为“has -a”的关系,抽象类强调“is -a”关系
  4. 接口中定义变量默认为public static final,且要赋初值,方法必须是public,static,且只能是这两个;抽象类中可以有自己的数据成员变量,也可以有非抽象的成员方法,而且成员变量默认为default。这些成员变量可以在子类中被重新定义,也可以重新赋值,抽象方法(有abstract修饰)不能用peivate,static,synchronized,native等访问修饰符修饰,同时方法以分号结尾,并且不带花括号
  5. 接口被运用于比较常用的功能,便于日后的维护或者添加删除方法;而抽象类更倾向于充当公共类的角色,不适用于对里面的代码进行修改

      接口是一种特殊形式的抽象类,使用接口完全有可能实现与抽象类相同的操作。当子类和父类之间存在有逻辑上的层次结构时,推荐使用抽象类;当用于不同类之间,定义不同类之间的通信规则,希望支持差别较大的两个或者更多对象之间的特定交互行为时,应该使用接口。
    此外,接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。抽象类也可以有静态的main方法。

0 0