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方法

  • 相关阅读:
    windows的80端口被占用时的处理方法
    Ansible自动化运维工具安装与使用实例
    Tomcat的测试网页换成自己项目首页
    LeetCode 219. Contains Duplicate II
    LeetCode Contest 177
    LeetCode 217. Contains Duplicate
    LeetCode 216. Combination Sum III(DFS)
    LeetCode 215. Kth Largest Element in an Array(排序)
    Contest 176 LeetCode 1354. Construct Target Array With Multiple Sums(优先队列,递推)
    Contest 176
  • 原文地址:https://www.cnblogs.com/orii/p/10662991.html
Copyright © 2011-2022 走看看