一、 抽象类和接口的特点 

  包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

  2)抽象类不能用来创建对象;

  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

  在其他方面,抽象类和普通的类并没有区别。

 二、 接口和抽象类的区别

  1、语法层面上的区别

  1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法(接口隐式地指定 );

  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的(接口隐式地指定);

  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

即:接口中的所有方法都是抽象方法,所有成员变量都是静态final变量。

  2.设计层面上的区别

  1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

  2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

三、 接口和抽象的Java语义区别,使用区别

四、 什么时候使用接口,什么时候使用抽象类

最新文章

  1. Java中的方法应用
  2. 2015.10.18 do while练习
  3. Android Studio git 版本回退到最新的版本
  4. 解决 Ubuntu 无法调节屏幕亮度的问题(转)
  5. Flex在Win10,Chrome浏览器上汉字乱码的问题
  6. 问题解决——XP线程池找不到QueueUserWorkItem
  7. Java删除文件夹和文件
  8. CSS3的颜色透明度 ajax请求时loading
  9. HDU 查找最大元素 2025
  10. ArcGIS API Reference & Flex API samples学习进度备忘
  11. c# 将文本中的数据快速导入到数据库(200万左右的数据量)
  12. 《Programming WPF》翻译 第5章 2.内嵌样式
  13. MySQL性能优化之参数配置
  14. TFboy养成记 CNN
  15. redis对sorted_set进行的相关操作
  16. RPM包的版本号比较
  17. 查看linux内存使用情况
  18. crt sqlplus 中文乱码解决方案:
  19. git回滚远程仓库代码/错提master分支的恢复
  20. 4. 多重背包问题 I

热门文章

  1. UIEvent笔记
  2. Quartz.Net_表达式参考说明
  3. [开源JVM] yvm - 自制Java虚拟机
  4. oracle安装注意
  5. helloweblogic 官方qq群欢迎加入!
  6. Python 3.7版本关于json.dump失效
  7. 在win7系统设置SQL Server2014 express为远程数据
  8. 转 $.ajax()方法详解
  9. Rabbitmq的五种模式和案例
  10. 那些H5用到的技术(4)——弹幕