zoukankan      html  css  js  c++  java
  • 类定义(课下选做)

    类定义(课下选做)

    要求

    • Book类包含书名,作者,出版社和出版日期
    • getter,setter
    • 至少三个构造方法,接收并初始化这些数据
    • 覆盖toString方法,返回良好的含有多行的书的描述信息
    • 覆盖equals方法,书名,作者,出版社和出版日期完全一致才说明两本书是一样的。
    • 创建一个测试类Bookshelf

    设计思路

    • 首先在Book类中定义所需要的变量,构造方法
    • 定义getter,setter方法 重难点就在于toString,equals方法的重写,以前在课上测试过
    • toString()方法的重写,返回重写的字符串即可。public String toString(){ return str; }
    • Object类中的equals方法:用于检测一个对象是否等于另外一个对象,源码如下:
    public boolean equals(Object obj) {
            return (this == obj);
        }
    
    • 实际处理中,若要比较两个对象是否相等,一般需要重写equals方法
      • 显示参数命名为otherObject, 稍后转化成other变量
    public boolean equals(Object otherObject)
    
    • 检测this和otherObject是否是同一个对象的引用,是,返回true;
    if(this==otherObject){
        return true;
    }
    
    • 检测otherObject是否为null, 是, 返回false;
    if(otherObject == null){
        return false;
    }
    
    • 比较this和otherObject是否属于同一个类. 如果equals的语义在每个子类中有所改变,就使用getClass检测:
    if(getClass() != otherObject.getClass()){
        return false;
    }
    
    • 如果所以子类语义相同,使用instanceof检测:
    if(!(otherObject instanceof Employee)){
        return false;
    }
    
    • 将otherObject转化为相对应的类型变量other
    Book bk = (Book)obj
    
    • 对所需要的比较的数据域进行比较. 如果是基本数据类型,使用a==b比较; 如果是对象比较,调用Objects.equals(a, b)进行比较

    • 当equals()被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

      • hashcode不相同,用equals()方法判断的返回的一定为false。
      • hashcode相同,equals()方法返回值不能确认,可能为true,可能为false。
    • getClass方法,获得当前对象的类型,下面的语句,得到的就是字符串的类型。

    Class theClass="hello".getClass();
    

    测试代码

    public class bookShelf {
        public static void main(String[] args) {
            Book b1 = new Book("Java实用教程","耿祥义","清华大学出版社","2017年9月");
            Book b2 = new Book("密码学","郑秀林","金城出版社","2016年8月");
            Book b3 = new Book("汇编语言程序设计","钱晓捷","中国工信出版社","2018年6月");
            System.out.println(b1.getBookname());
            System.out.println(b2.getDate());
            System.out.println(b3.getPublisher());
            System.out.println(b1.equals(b2));
            System.out.println(b2.equals(b2));
        }
    }
    

    运行结果截图

    码云链接

    参考

    重写equals方法

  • 相关阅读:
    Daily scrum[2013.12.03]
    Daily scrum[2013.12.02]
    gcc编译使用math.h的c程序
    推荐两篇分布式协调算法paxos的文章
    Linux系统如何查看版本信息
    [原]gcc编译器强别名导致的问题
    [转]Linux 在一个命令行上执行多个命令
    [转] Python执行系统命令的方法 os.system(),os.popen(),commands
    [转]Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
    [转]MySQL数据库基准压力测试工具之MySQLSlap使用实例
  • 原文地址:https://www.cnblogs.com/orii/p/10662991.html
Copyright © 2011-2022 走看看