• 类定义(课下选做)


    课下测试要求:

    • 设计并实现一个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+"	作者:"+auther+"	出版社:"+publisher+"	出版日期:"+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.类定义(课下选做)

  • 相关阅读:
    250 浅拷贝Object.assign(target, ...sources),深拷贝
    249 递归:概念,利用递归求1~n的阶乘,利用递归求斐波那契数列,利用递归遍历数据
    248 闭包:概念,作用,案例,思考题案例,chrome 中调试闭包
    247 高阶函数 之 函数可以作为参数传递
    246 JavaScript严格模式
    245 改变函数内部 this 指向:call,apply,bind,call、apply、bind 三者的异同
    244 函数内部的this指向:6种
    243 函数:函数的3种定义方式,函数的6种调用方式
    242 Object.defineProperty
    241 获取对象的属性名:Object.keys(对象)
  • 原文地址:https://www.cnblogs.com/jxxydwt1999/p/10659044.html
Copyright © 2020-2023  润新知