· 为什么需要接口?接口和抽象类的区别?

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。

抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供那些服务。

接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。大家在工作以后,做系统时往往就是使用“面向接口”的思想来设计系统。

接口和实现类不是父子关系,是实现规则的关系。比如:我定义一个接口Runnable,Car实现它就能在地上跑,Train实现它也能在地上跑,飞机实现它也能在地上跑。就是说,如果它是交通工具,就一定能跑,但是一定要实现Runnable接口。

· 接口的本质探讨

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你是好人,则必须能干掉坏人;如果你是坏人,则必须欺负好人。

接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。

面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++、Java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

区别

1. 普通类:具体实现

2. 抽象类:具体实现,规范(抽象方法)

3. 接口:规范!

======================================================

做一个题目:

1. 实现不同引用类型对象的大小比较

需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。

实现思路及关键代码:

将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。

1) 定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。

2) 定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,按照分数倒序排列;

3) 定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,按照编号正序排列;

定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。

代码如下:

public interface Comparable {int compareTo(Object obj);
}
public class News implements Comparable{private int nid;//编号private String title; //标题private String contents;//内容private String  type;//新闻类别public News() {}public News(int nid, String title, String contents,String type) {super();this.nid = nid;this.title = title;this.contents = contents;this.type = type;      }/*** 按照新闻编号正序排列*/public int compareTo(Object obj) {News other =(News)obj;return this.nid- other.nid;          }@Overridepublic String toString() {return "News [nid=" + nid + ", title=" + title + ", contents="+ contents + ", type=" + type + "]";}}
public class Student implements Comparable{private int id;private String name;private int age;private double score; public Student() {super();}public Student(int id, String name, int age, double score) {super();this.id = id;this.name = name;this.age = age;this.score = score;}/*** 按照学生成绩降序排序*/public int compareTo(Object obj) {Student other =(Student)obj;if(this.score>other.score){return -1;}else if(this.score<other.score){return 1;}else{return 0;}}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", age=" + age+ ", score=" + score + "]";}
}//测试类
public class Test {public static void main(String[] args) {//Student stu1 = new Student(11, "小红", 18, 97d);Student stu2 = new Student(12, "小东", 20, 98d);if(stu1.compareTo(stu2)>0){           System.out.println(stu2);System.out.println(stu1);}else{System.out.println(stu1);System.out.println(stu2);}//News news1 = new News(33, "恒大亚冠", "恒大亚冠小组被淘汰", "体育");News news2 = new News(44, "上海尚学堂", "请原谅我的姗姗来迟", "IT");if(news1.compareTo(news2)>0){System.out.println(news2);System.out.println(news1);          }else{System.out.println(news1);System.out.println(news2);}}
}

如有错误,欢迎批评指正!

java comparable接口_浅谈程序接口相关推荐

  1. java同名函数_浅谈Java 继承接口同名函数问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...

  2. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  3. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  4. java list翻转_浅谈Java数据结构中的常见问题

    1.常用数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素间的关系组成.常用的数据有:数组.栈.队列.链表.树.图.堆.散列表. 1)数组:在内存中连续存储多个元素的 ...

  5. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  6. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  7. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  8. java spring流程_浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  9. java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

    JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更小. JSON的格式 {属性名:属性值,属性名:属性值,--} 属性名的类型可以是string,number,boolea ...

最新文章

  1. docker学习系列7 容器化Node项目
  2. python类装饰器详解-Python 装饰器详解
  3. 项目: 用C语言写一个音乐播放器
  4. nginx源码学习Unix - Unix域协议
  5. android photopicker怎么修改状态栏,有没有办法阻止UIImagePickerController更改状态栏样式?...
  6. 入库成本与目标成本对比报表中我学到的东西
  7. (转载)—— Logistic Regression(逻辑回归)模型实现二分类和多分类
  8. 转_人人网开放平台技术架构
  9. 数据库期末复习知识点:(仅供参考)
  10. deepin linux下解决Qt搜狗输入法无法输入中文
  11. Cocos Creator学习のTiledMap
  12. 代码吃鸡:Python-Robocode
  13. 【电子产品】Fast FWR200 公司使用设备人数超过20个后,之后的设备无法上网
  14. Google Chrome商店开发者认证支付$5【图解认证支付成功】
  15. 用JS制作表格的添加删除
  16. ios系统——先了解iCloud是什么吧
  17. 关于AntMotion动画使用
  18. 服务器响应程序,封装高可复用的服务端响应SSC程序修复对象 --ServerResponse
  19. MEM/MBA数学强化(01)条件充分性判断
  20. 矩阵理论| 基础:Jordan标准型(从Jordan标准型求代数重数/几何重数/特征向量)

热门文章

  1. success.ftlh与error.ftlh
  2. Java实训项目1:GUI学生信息管理系统 - 实训概述
  3. Python学习笔记:利用timeit计算函数调用耗时
  4. 2017.10.28 压缩 思考记录
  5. 网络流性质及常见模型、改进空间的思考
  6. 【英语学习】【Daily English】U06 Shopping L03 What sort of market are you looking for?
  7. 领航机器人广告段子_教育机器人广告宣传语_段子网收录最新段子
  8. SPH(光滑粒子流体动力学)流体模拟实现六:Position Based Fluid(PBF)
  9. Unity协程实现分析以及Lua协程与Unity协程的混合使用
  10. mqtt如何发送心跳 安卓_互联网推送服务原理:长连接+心跳机制(MQTT协议)