课下测试要求:
- 设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter。
- 定义至少三个构造方法,接收并初始化这些数据。覆盖(Override)toString方法,返回良好的含有多行的书的描述信息。覆盖equals方法,书名,作者,出版社和出版日期完全一致才说明两本书是一样的。
- 创建一个测试类Bookshelf, 其中的main方法创建并更新几个Book对象。Book至少包含三本本学期教材内容。
一、设计思路
- 参考吴一凡同学的博客改编(本来想用接口或是抽象类但过程太复杂了)
- 定义一个
Book
类,对所有书的有关内容定义getter
和setter
- 定义
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.类定义(课下选做)