javase -- 抽象类与接口的异同


抽象类与接口的异同.

相同点.

  • 都不能实例化
  • 都需要类去实现

不同点.

  • 接口不能有构造方法,抽象类可以有。
  • 一个类可以实现多个接口,一个抽象类只能别一个类继承
  • 接口不能有方法体,抽象类可以有。(JDK1.7及以前)
  • 接口不能有静态方法,抽象类可以有。(JDK1.7及以前)
  • 在接口中凡是变量必须是public static final,方法必须是public,而在抽象类中没有要求。

从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类,让它们都实现新增的方法

使用接口:.

  • 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
  • 需要使用多重继承。

使用抽象类:.

  • 需要在几个相关的类中共享代码。
  • 需要能控制继承来的成员的访问权限,而不是都为 public。
  • 需要继承非静态和非常量字段。

文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
javase -- 代理模式 javase -- 代理模式
代理模式. 为其他对象提供一种代理以控制对这个对象的访问 代理类和被代理类都是某个接口的的实现类 静态代理 //静态代理 interface NetWork{ void browse(); } class Server impl
2020-07-30
下一篇 
javase -- 接口 javase -- 接口
接口.interface java中类不支持多继承,使用接口实现多重继承的效果 开发中,类和接口是并列的两个结构 interface JDK7及以前:只能定义全局常量和抽象方法 全局常量:[public] [static] [f
2020-07-30
  目录