“要针对接口编程,不要针对实现编程。”那么,在java的世界里,这里的接口指的是什么呢?无非是以下两种实现方式:

方式1)抽象类(只能有一个超类)

方式2)接口Interface(可以继承多个Interface)

那么何时使用抽象类,何时使用接口呢?回答这个问题,得搞清楚二者各自的优势。说白了是为了更好的应对变化。

一个是接口本身的变化,一个是接口实现的变化。

对于Interface而言,能够很好的应对接口实现的变化,但是很难应对接口本身的变化。一旦Interface发生变化,所有的实现都需要同时变化。如果实现类很多,那将是噩梦,甚至是不可行。

对于抽象类而言,接口本身的变化可以轻松应对。只要在抽象类中提供默认实现就可以轻松增加行为。

但是,我们也要看到,抽象类的实现存在短处。就是实现类必须对抽象类忠心不二。如果需要以另一种视角来看待同一个实现类,就只能使用Interface了。换句话说,Interface带来了多角度的好处。

Interface和抽象类并不是互斥的。你可以提供一个接口说“你可以使用这些功能”,在提供一个超类说“这是一种实现方式”。此时使用者应该应用接口类型,这样未来的维护者就可以根据需要随时替换新的实现。

转载于:https://www.cnblogs.com/howdoyoudo/p/3326184.html

使用抽象类还是接口(Java)相关推荐

  1. NO.16 沙场秋点兵:类vs抽象类vs接口 | Java敲黑板系列

    开场白 老铁 :接口.抽象类.类--三位英雄执剑走天涯,行侠仗义,被誉为"Java帝国三剑客".三位英雄从来都不会争强好胜,而是相互协助,发挥各自优势,共同打造Java帝国的强安全 ...

  2. Java 的抽象特性:抽象类与接口深度解析

    要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...

  3. Java复习之抽象类和接口

    Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...

  4. JAVA抽象类和接口的区别【附经典分析用例Door】

    这篇文章对抽象类和接口说的很详细,希望对大家有所帮助. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大 ...

  5. java学习--抽象类与接口

    一.抽象 在使用抽象类时需要注意几点: 1.抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可. 2.抽象方法必须由子类来进行重写. 3.只要包含一个抽象方法的抽象类,该方 ...

  6. JAVA 继承基本类、抽象类、接口

    Java是一个面向对象的语言,java面向对象一般有三大特征:封装.继承.多态. 封装:就是把一些属性和方法封装到一个类里. 继承:就如子类继承父类的一些属性和方法. 多态:就如一个父类有多个不同特色 ...

  7. java学习笔记(五)----super用法,final用法,抽象类,接口

    子类不会继承父类的构造方法,在子类的构造方法中可使用super(参数列表)调用父类的构造方法. class Person { String name;   int age;   public Pers ...

  8. java中抽象类和接口的作用与区别

    抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract ...

  9. Java抽象类和接口

    interface Io { //接口,默认publicvoid speak(); } abstract class A { //抽象类public void show() {System.out.p ...

最新文章

  1. android-async-http使用例子
  2. Elasticsearch对外提供分词服务实践
  3. 有符号数、无符号树混合计算问题。
  4. SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决
  5. Linux4版本,Linux 4.12发布,据传是历史最大版本之一
  6. bzoj4850 [JSOI2016]灯塔
  7. 2016 Multi-University Training Contest 1 T4
  8. php 去除div标签,JavaScript_清除div下面的所有标签的方法,复制代码 代码如下: div id=s - phpStudy...
  9. 不经意传输算法 效果
  10. 【HDU1284 中南林业大学第十一届校赛 B:】兑换零钱(dp)
  11. sap hana安装教程
  12. GEE开发之Landsat8_SR计算NDVI逐年时序变化
  13. 分享一些自己在用的maccms10的免费采集接口
  14. 数据结构与算法 c++描述 目录与源码
  15. php公鸡五钱一只,PHP经典题:百钱百鸡问题(穷举算法)
  16. kata-containers对接firecracker
  17. java 微信分享朋友圈 链接显示图片_分享网页到微信朋友圈,显示缩略图的方法...
  18. 【建议收藏】2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂
  19. [张雨生][张雨生典藏合集22CD][APE/整轨/7.56 GB][旋风/快传]
  20. 智慧零售的分级战场,苏宁618的升降策略能否厚积薄发?

热门文章

  1. java框架讲解ppt_经典框架spring介绍课件.ppt
  2. nginx pdo_mysql_lnmp环境,安装PHP7的扩展pdo_mysql报错的问题?
  3. mysql授权 改表_mysql开启远程登陆(修改数据表和授权两种方法)
  4. php批量下载网络图片,php批量下载网页图片并替换路径为本地
  5. dataset的去重计数 g2_向工程渣土运输车辆计数 漏洞损失说“不”
  6. Js获取短信验证码前段效果
  7. leetcode136 只出现一次的数字
  8. 《Python Cookbook 3rd》笔记(2.8):多行匹配模式
  9. 《剑指Offer》52:两个链表的第一个公共节点
  10. 完善博文 共享内存一写多读无锁实现的代码逻辑部分