已知 Book 类的定义与 toString0、equals()的改写,请写出 TestDemo类实例化该类,并完成两个方法的改写。
时间: 2024-10-21 18:14:35 浏览: 32
JS类中定义原型方法的两种实现的区别
假设我们有一个名为 `Book` 的简单类,它有两个默认方法 `toString0()` 和 `equals()`。原始定义可能是这样的:
```java
public class Book {
private String title;
private int year;
// 默认构造函数和 getters/setters 省略
public String toString0() {
return "Title: " + title + ", Year: " + year;
}
@Override
default public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Book book = (Book) obj;
return year == book.year && Objects.equals(title, book.title);
}
}
```
现在我们需要在 `TestDemo` 类中实例化这个 `Book` 类并覆盖这两个方法。例如,我们可以这样做:
```java
public class TestDemo {
public static void main(String[] args) {
// 实例化 Book 对象
Book book1 = new Book("The Catcher in the Rye", 1951);
Book book2 = new Book("To Kill a Mockingbird", 1960);
// 覆盖 toString 方法,添加作者信息
@Override
public String toString() {
return super.toString0() + " by " + getAuthor();
}
private String getAuthor() {
// 假设这里返回书籍的作者名
return "J.D. Salinger"; // 或者从数据库获取
}
// 完整重写了 equals 方法,考虑更多的比较条件
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Book otherBook = (Book) obj;
return year == otherBook.year &&
title.equals(otherBook.title) &&
getAuthor().equals(otherBook.getAuthor());
}
// 使用新的方法展示和比较书籍
System.out.println(book1); // 输出: Title: The Catcher in the Rye, Year: 1951, by J.D. Salinger
System.out.println(book1.equals(book2)); // 输出: false (因为它们有不同的年份)
}
}
```
阅读全文