类定义(课下选做)

课下测试要求:

  • 设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter。
  • 定义至少三个构造方法,接收并初始化这些数据。覆盖(Override)toString方法,返回良好的含有多行的书的描述信息。覆盖equals方法,书名,作者,出版社和出版日期完全一致才说明两本书是一样的。
  • 创建一个测试类Bookshelf, 其中的main方法创建并更新几个Book对象。Book至少包含三本本学期教材内容。

一、设计思路

  • 参考吴一凡同学博客改编(本来想用接口或是抽象类但过程太复杂了)
  • 定义一个Book类,对所有书的有关内容定义gettersetter
  • 定义BookShelf类,在该类中更新数据
  • 重写equals
    • 使用public boolean equals(Object o){……}重写
    • 使用if(this==o)判断地址是否相同,若相同则返回true
    • 使用if (getClass()!=o.getClass())判断对象类型是否相等
    • 最后判断成员变量是否相等
  • 重写toString类,直接重写public String toString(){return 字符串;},返回要输出的字符串即可。

二、源代码

Book类:

public class Book {
    String name;
    String auther;
    String publisher;
    String date;
    Book(){}//三个构造方法
    Book(String auther,String publisher,String date){}
    Book(String name,String auther,String publisher,String date){
        this.name=name;
        this.auther=auther;
        this.publisher=publisher;
        this.date=date;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAuther(String auther){
        this.auther=auther;
    }
    public String getAuther(){
        return auther;
    }
    public void setPublisher(String publisher){
        this.publisher=publisher;
    }
    public String getPublisher(){
        return publisher;
    }
    public void setDate(String date){
        this.date=date;
    }
    public String getDate(){
        return date;
    }

    public boolean equals(Object o){
        if (this==o)        //判断地址是否相等
            return true;
        if (getClass()!=o.getClass())    //判断对象类型是否相等
            return false;
        Book book=(Book)o;         //向下转型,判断成员变量是否相等(使用&&必须保证所有都相同)
        if (book.name==this.name&&book.auther==this.auther&&book.publisher==this.publisher&&book.date==this.date)
            return true;
        else
            return false;
    }
    @Override
    public String toString() {
        return "书名:"+name+"\t作者:"+auther+"\t出版社:"+publisher+"\t出版日期:"+date;
    }
}

BookShelf类

public class BookShelf {
    public static void main(String[] args){
        Book b1 = new Book("Java 2实用教程","耿祥义","清华大学出版社","2017.9");
        Book b2 = new Book("计算机网络","谢希仁","电子工业出版社","2017.1");
        Book b3 = new Book("密码学","郑秀林","金城出版社","2016.8");
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
        System.out.println(b1.equals(b1));
        System.out.println(b1.equals(b2));
        System.out.println(b2.equals(b3));
    }
}

三、运行结果截图

四、码云代码链接

码云链接

SP、留在最后的疑问

  • 所有数据都要定义getter和setter感觉有些赘余,请问老师可不可以使用以下代码获得数据
    public void showBook(String name,String auther,String publisher,String date){
        this.name=name;
        this.auther=auther;
        this.publisher=publisher;
        this.date=date;
    }

参考资料
1.java重写equals方法需要注意的几点
2.重写equals()方法
3.类定义(课下选做)

posted @ 2019-04-07 21:45  20175215丁文韬  阅读(155)  评论(0编辑  收藏  举报