《Java 程序设计》课堂实践二
题目
设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期,这些数据都要定义getter和setter。定义至少三个构造方法,接收并初始化这些数据。覆盖(Override)toString方法,返回良好的含有多行的书的描述信息。覆盖equals方法,书名,作者,出版社和出版日期完全一致才说明两本书是一样的。

创建一个测试类Bookshelf, 其中的main方法创建并更新几个Book对象。Book至少包含三本本学期教材内容。

提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。

实验代码
public class Book {
public String getName() {
return Name;
}

public void setName(String name) {
this.Name = name;
}

public String getWriter() {
return Writer;
}

public void setWriter(String writer) {
this.Writer = writer;
}

public String getPublishingHouse() {
return PublishingHouse;
}

public void setPublishingHouse(String publishingHouse) {
this.PublishingHouse = publishingHouse;
}

public String getPublishingDate() {
return PublishingDate;
}

public void setPublishingDate(String publishingDate) {
this.PublishingDate = publishingDate;
}

private String Name;
private String Writer;
private String PublishingHouse;
private String PublishingDate;

@Override
public String toString() {
return "Book{" +
"Name='" + Name + ''' +
", Writer='" + Writer + ''' +
", PublishingHouse='" + PublishingHouse + ''' +
", PublishingDate='" + PublishingDate + ''' +
'}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Book book = (Book) o;

if (!Name.equals(book.Name)) return false;
if (!Writer.equals(book.Writer)) return false;
if (!PublishingHouse.equals(book.PublishingHouse)) return false;
return PublishingDate.equals(book.PublishingDate);

}

@Override
public int hashCode() {
int result = Name.hashCode();
result = 31 * result + Writer.hashCode();
result = 31 * result + PublishingHouse.hashCode();
result = 31 * result + PublishingDate.hashCode();
return result;
}

public static void main(String[] args) {
Book book = new Book();

book.setName("测试用例");
book.setPublishingDate("2017.5.17");
book.setWriter("20155327");
book.setPublishingHouse("JAVA");

System.out.println(book.toString());

}

产品代码
class BookShelf {
public static void main(String[] args) {
Book book1 = new Book();
Book book2 = new Book();
Book book3 = new Book();

book1.setName("JAVA学习笔记");
book1.setPublishingDate("2015.3.1");
book1.setWriter("林信亮");
book1.setPublishingHouse("清华大学印刷厂");

book2.setName("汇编");
book2.setPublishingDate("2017.5.17");
book2.setWriter("mmm");
book2.setPublishingHouse("nnn");

book3.setName("数据结构");
book3.setPublishingDate("2017.5.17");
book3.setWriter("qqq");
book3.setPublishingHouse("aaa");

System.out.println(book1.toString());
System.out.println(book2.toString());
System.out.println(book3.toString());
}

实践截图

学习过程

1.写一个最初级的代码

2.对数据进行getter和setter:

通过右键选择Source -> Generate Getters and Setters

3.覆盖toString()方法:

通过右键– source- Generate toString()… 选择要输出的变量

4.覆盖equals方法:

遇到的问题:

许多知识点不熟练,耽误太长时间。

知识点

1覆盖的通用约定。

自反性。对于任何非null的引用值x,x.equals(x)必须返回true
对称性。对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。
传递性。对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)则必须返回true。
一致性。对于任何非null的引用值x、y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一直返回true,或者一致返回false。
对于任何非null的引用值x,x.equals(null)必须返回false。

2.构造函数间的调用用this,this代表所属函数的引用。

3对数据进行getter和setter好处:建一个类,声明一个变量,并给了它getter和setter方法。

setter方法在刚开始创建变量时没有赋值,后面用这个方法给他赋值
getter方法,变量有了值后就可以用这个方法把它调出来。

4.equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。

总结与反思

这次实践总的来说还是由于自己知识点掌握的不牢靠,进行覆盖时耽误了太多时间,还是需要多加练习。

 posted on 2017-06-10 15:29  20155327李百乾-  阅读(236)  评论(2)    收藏  举报