Java编程那些事儿70——抽象类和接口(三)

陈跃峰

出自:http://blog.csdn.net/mailbomb

8.9.3 抽象类和接口的比较

抽象类和接口都是进行面向对象设计时专用的设计结构,在实际进行项目设计时,经常需要考虑的问题就是——“使用抽象类还是接口”?下面通过对于抽象类和接口进行简单的比较,熟悉两者之间的区别和联系,从而在实际设计时使用恰当的结构。

1.         什么时候使用抽象类或接口?

当设计中为了规范类中方法声明的结构(即类的行为)时,使用抽象类或接口。也就是强制子类对外部提供统一的方法声明时,使用抽象类或接口。

2.         抽象类和接口的区别(不同点)

a)抽象类是类,而接口是接口。

因为抽象类是一个类,所以类内部可以包含的内容(构造方法、方法和属性等)在抽象类内部都可以存在,当然抽象类也受到类的单重继承的限制。而接口是接口类型,所以接口内部只能包含常量属性和抽象方法,但是一个类可以实现多个接口,所以接口不受类的单重继承的限制。

b)抽象类内部可以包含实体方法,而接口不能

抽象类是一个类,所以在抽象类内部既可以包含抽象方法也可以包含实体方法,而接口内部的每个方法都必须是抽象方法。

c)抽象类可以继承类,而接口不能

抽象类是一个类,所以在设计时可以使抽象类继承其它的类,在已有类的基础上进行设计,但是接口不能继承类。

3.         抽象类和接口的联系(相同点)

a)抽象类和接口都可以声明对象,但是都只能使用子类的构造方法进行创建。

b)抽象类和接口内部都可以包含抽象方法。

按照Java语言的语法,子类在继承抽象类或实现接口时,都必须覆盖这些抽象方法,否则必须声明为抽象类。

c)抽象类和接口都可以代表一种类型,从而可以统一子类对象的类型,获得良好的可扩展性。

4.         什么时候使用抽象类?

当满足以下的条件时,最好使用抽象类进行设计:

a)子类不继承其它父类

b)子类中存在完全相同的功能实现的方法

c)子类中存在相同的属性

d)设计出的结构需要继承其它类

当需要满足d条件时,只能使用抽象类,否则也可以考虑使用接口实现。

5.         什么时候使用接口?

当满足以下的条件时,最好使用接口进行设计:

a)子类已经继承了其它父类

b)子类中不存在完全相同的功能实现方法

c)子类中不存在相同的属性

d)设计出的结构不需要继承其它类

当需要满足a条件时,只能使用接口,否则也可以考虑使用抽象类实现。

6.         抽象类和接口的其它用途

a)禁止创建该类的对象时,可以把该类声明为抽象类。

b)当需要存储大量的常量数据,而这些常量数据将会在项目中的多个类之间使用时,可以使用接口。

c)当需要统一具有某种功能的类的对象时,可以使用接口。例如Serializable接口。

当然,只有经过大量的系统设计训练以后,才可以更加深刻的理解抽象类和接口的区别和联系,从而更加自如的进行选择。

另外,需要说明的是,不是每个项目中都必须使用抽象类或接口的。

Java编程那些事儿70——抽象类和接口(三)相关推荐

  1. Java编程那些事儿69——抽象类和接口(二)

    Java编程那些事儿69--抽象类和接口(二) 陈跃峰 出自:http://blog.csdn.net/mailbomb 8.9.2 接口 接口(Interface)是一种复合数据类型. 至此,Jav ...

  2. Java编程那些事儿68——抽象类和接口(一)

    Java编程那些事儿68--抽象类和接口(一) 陈跃峰 出自:http://blog.csdn.net/mailbomb 8.9  抽象类和接口 在实际的项目中,整个项目的代码一般可以分为结构代码和逻 ...

  3. Java编程那些事儿——文件操作之写文件

    Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...

  4. Java编程那些事儿78——时间和日期处理

    Java编程那些事儿78--时间和日期处理 陈跃峰 出自:http://blog.csdn.net/mailbomb 9.6 java.util包 java.util包是Java语言提供的工具类包,该 ...

  5. Java编程那些事儿74——java.lang包介绍1

    Java编程那些事儿74--java.lang包介绍1 陈跃峰 出自:http://blog.csdn.net/mailbomb 9.4 JDK API包名综述 在整个JDK API中,大约包含1.2 ...

  6. Java编程那些事儿11——JDK的获得、安装和配置

    Java编程那些事儿11--JDK的安装.配置和使用 作者:陈跃峰 出自: http://blog.csdn.net/mailbomb 第二章 建立开发环境 "工欲善其事,必先利其器&quo ...

  7. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础 - 进阶继承,抽象类,接口 进阶继承 class Stu {int age = 1; } class Stuo extends Stu {int agee = 2; } class ...

  8. Java编程那些事儿102——网络编程技术1

    Java编程那些事儿102--网络编程技术1 陈跃峰 出自:http://blog.csdn.net/mailbomb 13.2 网络编程技术 前面介绍了网络编程的相关基础知识,初步建立了网络编程的概 ...

  9. Java编程那些事儿103——网络编程技术2

    Java编程那些事儿103--网络编程技术2 陈跃峰 出自:http://blog.csdn.net/mailbomb 13.2.3 TCP编程 按照前面的介绍,网络通讯的方式有TCP和UDP两种,其 ...

最新文章

  1. BCH或将在年底超越ETH
  2. maven deploy plugin_学习Maven之Maven Surefire Plugin
  3. 常见的反爬手段和解决思路
  4. 【撸码师备忘录】腾讯API接入列表
  5. SAP Spartacus B2B table的配置信息的merge原理
  6. 虚拟机VirtualBox中Ubuntu无法全屏(终极解决方法)
  7. Visual Studio属性配置中使用宏
  8. PHP网络操作函数汇总
  9. 技术铺路,生态架桥:来自华为的开发者全面进阶说明书
  10. java mysql存储图片_Java存储图片到Mysql
  11. Collectors.summingDouble()
  12. 变量声明和定义及extern 转载
  13. 离线安装.net4.032位_怎样在断网的情况下安装IE11
  14. java 弹弹堂源码_弹弹堂s应用宝版下载
  15. C语言数据结构——用链表实现一个简单的电话号码簿
  16. 深度多模态子空间聚类网络+代码实现
  17. ROS-moveit!仿真出现问题:Unable to identify any set of controllers that can actuate the specified
  18. Fiddler环境配置/代理设置:电脑端/移动端/模拟器
  19. 自动写稿机器人下载,写稿机器人有哪些,写稿机器人软件下载
  20. pos机顾显java控制打印内容,使用POS打印机进行Java收据打印

热门文章

  1. 《Microduino实战》——2.5 Microduino传感器系列
  2. JS获取时间戳 10位数时间戳
  3. 什么是软件过程?为什么要使用软件过程?如何评价一个好的软件过程?
  4. 分支分歧(branch divergence)造成SIMT性能降低的原因
  5. Hessian矩阵\海塞矩阵\海森矩阵
  6. 栈与队列(逆波兰式)
  7. 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
  8. 使用openssl生成https证书
  9. 国外工业互联网安全现状分析(政策;标准;厂商;产品)
  10. python 二项式分布学习