Comparable接口用于对象的比较,任何使用Comparable接口的类必须提供compareTo方法。这个方法返回一个整数代表两个对象差值。如果相比较的两个接口类型不可比,会抛出ClassCastException

compareTo应用例子

package inheritanceAndPolymorphism;import java.util.*;public abstract class Shape implements Comparable{private String name;//constructorpublic Shape(String shapeName) {name = shapeName;}public String getName() { //an abstract method can have both abstract and concrete methodreturn name;}public abstract double area();public abstract double perimeter();public double semiPerimeter() {return perimeter() / 2;}public int compareTo(Object obj) {final double EPSILON  = 1.0e-15; //machine precision, in case of round-off errorShape rhs = (Shape) obj;double diff = area() - rhs.area();if (Math.abs(diff) <= EPSILON * Math.abs(area())) {return 0; //area of this shape equals area of obj} else if (diff < 0) {return -1; //area of this shape less than area of obj} else {return 1; //area of this shape greater than area of obj}}/** The Circle Square, and other subclasses of Shape will automatically implement* Comparable and inherit the compareTo method*/

注意:
1对于小数的比较,要防止round-off error,因此判断是否相等不可直接等号,而是判断误差是否在计算机精度之内
2compareTo的第一步要把Object转化为该类类型(Shape),否则计算机将找不到方法Area()

下面例子在两个对象中找最大

package inheritanceAndPolymorphism;public class FindMaxTest {//return the larger of two objects a and bpublic static Comparable max (Comparable a, Comparable b) {if (a.compareTo(b) > 0) {return a;} else {return b;}}public static void main(String[] args) {// TODO Auto-generated method stub//test max on two Shape objectsShape s1 = new Circle(3.0, "circle");Shape s2 = new Square(6.5, "square");System.out.println("Area of " + s1.getName() + " is " + s1.area());System.out.println("Area of " + s2.getName() + " is " + s2.area());Shape s3 = (Shape)max(s1, s2);System.out.println("The larger shape is the " + s3.getName());}}

1本例中方法参数为Comparable类型,s1 s2均为Comparable因此不需要类型转换
2基础数据类型不是对象,不可使用Comparable

AP计算机A自学笔记:Comparable接口相关推荐

  1. AP计算机A自学笔记:程序分析

    验证(assertions) 验证是对于一个程序在任意一点的准确描述,如果验证正确,程序在这一点工作正常 先决条件(precondition) 一段程序的先决条件指的是正要运行之前什么为真 后置条件( ...

  2. 计算机通信网自学笔记(1)

    计算机通信网自学笔记(1) 写在前面: 笔者是电子科技大学信通学院网络工程专业的一名大二学生."在两周内对一门陌生且复杂的专业课进行自学并加以运用",这对于笔者来说是一件十分有挑战 ...

  3. ap计算机可以自学吧,如何自学AP课程?

    国际教育网讯:国际生在完成课业后参加AP考试,得到一定的成绩后可以获得大学学分.一般修一门大学的课程要花费数千美元,而参加AP考试只需要92美元,因此选修AP课程不仅可以展现学生的能力,它还是一种省钱 ...

  4. JavaSE自学笔记013_Real(抽象类、接口、两种设计模式)

    JavaSE自学笔记013_Real(抽象类.接口) 一.基本概述 (一)抽象类(关键字:abstract) //抽象方法 public abstract class Animal{abstract ...

  5. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  6. Java:Effective java学习笔记之 考虑实现Comparable 接口

    Java 考虑实现Comparable 接口 考虑实现Comparable 接口 1.Comparable接口 2.为什么要考虑实现Comparable接口 3.compareTo 方法的通用约定 4 ...

  7. JAVA自学笔记25

    JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...

  8. JAVA自学笔记23

    JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...

  9. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...

最新文章

  1. python 之 Pandas (五)导入导出
  2. 深入浅出Android系统启动流程
  3. SQLite的sqlite_sequence表
  4. 车提示检测轮胎气压_无钥匙启动的车启动后,车主带着钥匙离开车,能不能把车开走?...
  5. CSDN中的如何转载博文
  6. 分布式事务之底层原理揭秘
  7. 面向对象阶段个人总结
  8. java日期时间各种变换及处理
  9. python 导入包 导入模块
  10. ACM training贪心算法——坐椅子的背包问题
  11. JBoss企业级应用服务平台群集指南(一)
  12. ArcPad 10 的安装部署
  13. 2013八大免费杀毒软件排行榜
  14. 使用wininet的InternetReadFile下载文件
  15. 通用模块脚本使用案例:玩家与NPC对话
  16. excel表格选择下拉多选_Excel下拉多个选择或删除
  17. 利用Greenfoot制作简单的小游戏——记忆翻牌游戏(三)
  18. Barefoot可编程交换机获ATT订单
  19. 【观察】帆软:扎根于BI,收获于未来
  20. 2021-05-18

热门文章

  1. SpringBoot实现邮箱注册
  2. 电力系统潮流计算matlab仿真,计算结果自动保存到excel文件中
  3. 张赐荣: 详解 Java 中的包装类型
  4. 10G 82599EB 网卡测试优化 kernel
  5. 基于uni-app的微信小程序引入字体文件
  6. 卷积物理意义 几何意义
  7. 从电视购物到电商直播,什么造就了「带货的参差」
  8. UNI-APP,实现给字符串中部分字符、子串添加样式(颜色,字号等)
  9. 关于超高频RFID的读距问题
  10. 带你一文看懂数字乡村怎么建