图书馆接口(Library)
成员方法:
borrow( ),借阅图书
revert( ),归还图书
图书类(Book)
成员变量:
图书名称(name) String类型
出版社(publisher) String类型
构造方法:
通过形参初始化图书名称(name)和出版社(publisher)
普通方法:
(1)设置gettor和settor方法用于获取和设置类中name变量的值;
(2)重写Equals方法,当且仅当书名(name)和出版社(publisher) 均相等时,即为同一本书。
(3)重写toString方法,返回书名(name)和出版社(publisher)的信息,样式如下:“书名:Java程序设计,出版社:清华大学出版社”
馆藏图书类(CollectionBook),继承自Book类,实现Library接口
成员变量:
图书编号(bNo) String类型
图书书库(stacks) String类型
是否借阅(isBorrow) boolean类型 图书状态为已借阅时,值为true
构造方法:
调用父类构造方法初始,化书名(name)和出版社(publisher)信息,再初始化图书编号(bNo)和线路图书书库(stacks)。
普通方法:
(1)实现接口中的borrow方法
如果图书状态为已借阅,则输出“对不起,该图书已借阅”,否则,修改该图书状态为已借阅,输出“借阅成功”
(2)实现接口中的revert方法
如果图书状态是可借阅状态,输出“该图书已归还”,否则,修改图书借阅状态为未借阅,并输出“还书成功”;
通过main函数测试。
(1)创建两个CollecitonBook对象book1和book2,分别输出book1和book2,并调用其equals方法判断两个对象是否相等;
(2)通过键盘输入整数,输入0,则对book1进行借阅,输入1,则对book2进行归还操作。
package 实验报告;
import java.util.Scanner;
interface Library{ //图书馆接口(Library)
abstract void borrow(); //两个抽象方法
abstract void revert();
}
abstract class Book{ //图书类(Book)
String name;
String publisher;
public Book(String name,String p){ //构造方法初始化成员变量
this.name=name;
publisher=p;
}
public String gettor() {
return name;
}
public void settor(String name) {
this.name = name;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}else{
if(obj instanceof Book){
Book ball = (Book)obj;
if(this.name == ball.name&&this.publisher==ball.publisher){
return true;
}
}
}
return false;
}
public String toString() {
return "Book [书名:" + name + " , 出版社:" + publisher + " ]";
}
}
class CollectionBook extends Book implements Library{
String bNo;
String stacks;
boolean isBorrow;
public CollectionBook(String name,String p,String bNo, String stacks,boolean isBOrrow) {
super(name, p);
this.bNo=bNo;
this.stacks=stacks;
isBOrrow=true;
}
public void borrow() {
if (isBorrow==true) {
System.out.println("对不起,该图书已借阅");
}
else {
isBorrow=true;
System.out.println("借阅成功");
}
}
public void revert() {
if (isBorrow!=true) {
System.out.println("该图书已归还");
}
else {
isBorrow=false;
System.out.println("还书成功");
}
}
}
public class App1 {
public static void main(String[] args) {
CollectionBook book1=new CollectionBook("C语言", "北京大学出版社", "001", "计算机类", true);
CollectionBook book2=new CollectionBook("Java程序设计", "清华大学出版社", "002", "计算机类", true);
System.out.println("book1.equals(book2)是"+(book1.equals(book2)));
boolean a = true;
if (book1.equals(book2)==a){
System.out.println("相等");
}else {System.out.println("不相等");}
if (book1.name==book2.name && book1.publisher==book2.publisher) {
System.out.println("该书为同一本");
}
else {
System.out.println("该书不是同一本");
}
Scanner App1=new Scanner(System.in);
System.out.println("请输入0或1:");
int n=App1.nextInt();
if (n==0) {
book1.borrow();
}
if (n==1) {
book1.revert();
}
}
- 首先看题目要求第一点,定义一个图书馆接口,接口是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法,实验我们先定义出图书馆接口,按照要求写出两个抽象方法borrow,revert。
- 然后看第二个要求,图书类,由于类中某些方法实现不确定,实验我们可以选择用abstract关键字来修饰图书馆类,然后按照要求定义出两个string类型的成员变量。
- 下一步使用构造方法初始化成员变量,题目要求通过形参,所以将String name;String publisher传入(String name,String p),因为形参与成员名字重名,实验这里用 this 来区分this.name=name;。
- 下一步设置gettor和settor方法用于获取和设置类中name变量的值;很简单,首先我们写出获取name的返回值类型为string方法,然后直接return就好了。
- 下一步settor方法设置那么值,直接传入name赋值,然后是重写Equals方法,要求是当且仅当书名(name)和出版社(publisher) 均相等时,即为同一本书。首先我们看到入参类型是Object类型,父类不能调用子类特有的属性或方法,需要向下转型并且由入参是Object类型,也就是说任何类型的参数都能进来,实验要先进行一个非空判断,然后进行if判断(instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例)传入参数是否是book类的实例,如果是的话,正常判断实例化对象的name与publisher是否相等,是则返回true否则返回Flase。
- 接下来是重写toString方法(toString()方法是在Object类里面的方法,它返回的是String型的数据:类名+@+哈希值的16进制形式,方法重写时注意返回值为string类型即可直接return"Book [书名:" + name + " , 出版社:" + publisher + " ]";
- 然后是3.馆藏图书类(CollectionBook),继承自Book类,实现Library接口,首先是继承自book类,使用 extends关键字表明继承关系,然后使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。当类实现接口的时候,类要实现接口中所有的方法
- 然后按照要求还是先声明变量,然后构造方法,按照要求初始化几个变量,使用super来调用父类中的构造方法初始化变量,然后下一步实现接口中的borrow方法,因为已经有表明图书借出状态的变量isBorrow所以我们直接if判断就好了,revert()方法也一样。最后我们通过main函数测试一下,首先根据我们创建的类来实例化两个对象 CollectionBook book1=new CollectionBook("C语言", "北京大学出版社", "001", "计算机类", true);,然后调用equals来判断是否相等,可以这样 System.out.println("book1.equals(book2)是"+(book1.equals(book2)));看输出结果,也可以再写一个if判断。最后通过键盘输入0,1判断,直接if判断调用方法即可