文档章节

接口和类

文弱书生_罗剑
 文弱书生_罗剑
发布于 2015/10/09 13:39
字数 1009
阅读 91
收藏 7


    1、关于接口的定义:


    接口可以理解为行为的抽象,即对“做什么”进行抽象,具体是怎么实现的,它一点也不用关心。从更高层次上说,接口是规范与实现的分离。举个例子就是,鸟儿会飞,飞机会飞,这样就可以去写一个“飞”的接口,飞机类和鸟类可以去实现这个接口。
    

    2、关于抽象类的定义:


    抽象类可以理解为对象的抽象 ,即对“是什么”进行抽象。举个例子,有三角形,有正方形,他们更高层次的抽象就是他们都是形状这个类。

 


二、相同点:


    1、都不能被实例化
    2、都包含为实现的方法声明
    3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员

 

三、不同:

    

    1、抽象类可以只实现部分方法,接口则必须实现其全部方法;抽象类的方法可以有抽象方法,也可以有普通方法,接口里的方法必须是抽象方法;抽象类的方法的访问权限可以多种,接口的方法的访问权限只能是public。 
    

    2、一个类可以实现N个接口,却只能继承一个抽象类。
    抽象类的功能要远超过接口,但是,定义抽象类的代价高。你试想一下,一个子类只能继承一个超类,在这个类中你必须继承或编写所有子类的共性。虽然接口在功 能上会弱化许多,它仅仅针对动作定义(范围缩小),但是一个类可以实现多个接口(个数多,代替范围小的缺陷),这样可以实现灵活的操作。

    3、接口中基本数据类型为static ,而抽类象不必。
    有人可能会有疑问,为什么接口中的属性都是static的呢?这个举个例子就好理解了,如果接口中有一个变量intA,我们通过实现它的ClassA类而 改变了intA的值,那么实现接口的ClassB,ClassC中的intA变量都会跟着改变,可想而知,这样的变化会造成混乱,可见,如果不是 static型,那么接口就不再具备那么高层的抽象,而是带着可变的成分。

 


四、实战时,抽象类 or 接口??


    基本的区分,我们掌握了,下面就是怎么使用了。什么情况下使用抽象类?什么情况下使用接口?看大话设计模式的时候,我们会发现,行为模型几乎总是通过接口 而不是抽象类定义。如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能够更有效地分离行为与实现,为代码的维护和修改带来方 便。所以我给出的建议是:当你注重实现的层次关系的时候,避免代码大量复用,目的在于实现行为的时候,可以定义成抽象类。当你觉得这个动作,很多地方可以 使用到的时候,就用接口去定义一下行为即可。


五、总结:


    这里,我就在思考,什么是抽象?抽象就是把一些不可变的东西封装在一起,而可变的东西延迟在子类中去具体的实现。通过上述的对比,不难看出接口的本意所 在,实际上它是对一类事物属性和行为的高层次抽象,这里我想到了大话设计模式中的开闭原则:对修改关闭,对扩展开放。还有依赖倒转原则:针对接口编程,而 非针对实现。这些原则是我们编码时刻要考虑到的宗旨,这也是我们软件开发中一致所追求的。


本文转载自:

文弱书生_罗剑
粉丝 4
博文 81
码字总数 17500
作品 0
长沙
程序员
私信 提问
第十八节:详解Java抽象类和接口的区别

前言 对于面向对象编程来说,抽象是它的特征之一。 在Java中,实现抽象的机制分两种,一为,二为。 抽象类为,接口为。 今天来学习一下Java中的抽象类和接口。 目录 什么是抽象 什么是抽象类...

达叔小生
2018/08/01
0
0
C#中抽象类和接口的区别

一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派...

晨曦之光
2012/03/09
128
0
接口(interface)和抽象(abstract)类的区别

接口与抽象类的区别: 1 两者表达的概念不一样。抽象类是一类事物的高度聚合,与子类的关系属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为...

cloud-coder
2016/06/04
88
0
接口和抽象类有什么区别?Java编程学习

  接口在JAVA语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。   接口并不是类,虽然编写接口的方式和类很相...

zhouzhou2018
2018/05/25
7
1
JavaSE——面向对象:接口

什么是接口: 硬件接口:指的是两个硬件设备之间的连接方式。硬件接口既包括物理上的接口,还包括逻辑上上的数据传输协议。 软件接口:程序代码,特殊的类。表示一种规范,是具有N个方法的特...

一越王超
2018/01/11
22
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx+tomcat配置https

1、nginx配置https和【proxy_set_header X-Forwarded-Proto $scheme;】 2、java代码: String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServe......

perofu
14分钟前
3
0
必看的Linux系统新手进阶老手心得

不知道从什么时候起,linux这个话题变得越来越普及,成为大家经常讨论的话题。无论在网络上还是实际生活中,竟然很多人都在纠结学习linux的问题。网络上给的答案千千万万,而却还有很多人踌躇...

Linux就该这么学
17分钟前
3
0
Spring Boot 配置元数据指南

1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的。但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot Configuration Proces...

liululee
20分钟前
2
0
foreach查找子类

$list = $menu_model -> menu_list();$parent_list = [];foreach ($list as $v){ if ($v['pid'] == 0) { $parent = $v; foreach ($list as $v1) ......

小小小壮
32分钟前
2
0
基于 HTML5 Canvas 实现的 TP-LINK 电信拓扑设备面板

前言 今天我们以真实的 TP-LINK 设备面板为模型,完成设备面板的搭建,和指示灯的闪烁和图元流动。 先来目睹下最终的实现效果:http://www.hightopo.com/demo/blog_tplink_20170511/index.h...

htdaydayup
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部