文档章节

接口 抽象类

勤奋的蚂蚁
 勤奋的蚂蚁
发布于 2017/02/25 20:29
字数 603
阅读 17
收藏 0
点赞 0
评论 0

今天看文章说到工作中对于接口和抽象类使用是否按照一定标准,仔细想了想,接触的几个项目,都没有按照一定标准使用.

网上搜索了一番,关于使用标准各有各的说法,不过大多数人从类可以继承和接口不可以继承,只可以实现方面考虑,即类的继承认为是"is-a",接口认为是"like-a"这么两种形式.

有的认为接口是一种类似框架的存在,即实现接口的对象可以没有任何关联,完全是不同的类别.

比如说猫,狗可以认为是动物,都有叫这样的行为,叫的内容不同,一个喵喵,一个汪汪,那么可以把叫抽象出来,具体的叫声有子类实现;这样定义为抽象类;再者以飞为例,鸟和飞机都可以飞,但是属于不同类别,则定义为接口.但是个人认为如果把叫的范围扩大一些,不仅仅局限于动物,那么是不是就可以定义为接口了;如果把飞范围缩小些,比如大雁、麻雀,那么是不是可以定义为抽象类了。如此说来,定义是接口还是抽象类,完全由对象的范围来决定,即由项目中的对象来决定.

当然接口需要遵循ISP原则,全称“ISP接口隔离原则”,以下从描述摘自http://baike.baidu.com/item/isp/4807182#viewPageContent

1.使用多个专门的接口比使用单一的总接口要好

2. 一个类对另外一个类的依赖性应当是建立在最小的接口上的

3. 一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

简单来说就是接口要合乎大小,不要胖,不要瘦.

实现方法主要以下两种:

1、使用委托分离接口.
2、使用多重继承分离接口.

这个明天再详细研究.

总而言之,接口和抽象类的使用规则建立在对象基础上,“is-a”、“like-a”是比较容易理解区别的,需要具体问题具体分析.

 

© 著作权归作者所有

共有 人打赏支持
勤奋的蚂蚁
粉丝 5
博文 42
码字总数 9660
作品 0
海淀
什么是抽象类?什么是接口?两者有什么区别?如何使用它

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

lzw_me
2014/04/30
0
0
C#中抽象类和接口的区别

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

晨曦之光
2012/03/09
111
0
小朋友学Java(9):抽象类与接口

之前提过面向对象有三大特性:封装、继承、多态。 还有另一种说法,即面象对象有四大特性:抽象、封装、继承、多态。 这两种说法都是对的,不必拘泥于哪种说法。关键要能理解这些特性的含义。...

翡翠森林Z
2017/12/12
0
0
深入理解Java的接口和抽象类

深入理解Java的接口和抽象类   对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。...

小湘西
2016/07/07
27
0
再说抽象类

深入理解Java的接口和抽象类   对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。...

wf王帆
2016/05/26
65
0
think in java第九章接口 总结随笔

什么是接口,接口的作用 java接口是一系列方法的声明,是一些方法特征的集合,接口只有方法的特征没有方法的实现。 接口可以提供符合接口需求的类的一套规范(其实感觉就是一个招牌),主要作...

The_flying_pig
2017/07/18
0
0
什么是抽象类?什么是接口?接口和抽象类的区别在哪里?怎样去理解它们呢?

1、这里我们来参考一下博文。 http://blog.csdn.net/fenglibing/article/details/2745123 接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对...

Oscarfff
2015/04/17
0
0
Java语言中的----抽象类、接口

day12 Java语言中的抽象类与接口 一、抽象类和接口概述; 在昨天我们学习了Java的继承功能,这个是一个核心知识点,今天我们再继承的基础之上学习一下抽象类和接口这两个知识。什么是抽象类?...

孤独一夜
2017/09/28
0
0
深入理解Java中的抽象类和接口

对于面向对象编程来说,抽象是它的一大特征。在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口。这两者有太多向内的地方,又有太多不同的地方。很多人在初学的时候以为它们可以随意...

FunGa
2015/11/03
0
0
JAVA中抽象类,接口,以及区别

抽象类 1.abstract 抽象修饰符——抽象就是为了让子类集成的,并不能直接实现一个对象 2.抽象类中所有抽象方法都要在子类中实现 3.拥有抽象方法的类必须声明为抽象类 4.抽象类可以有非抽象的...

小贱是个程序员
2016/11/17
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部