java-类与接口-图书馆

 

图书馆接口(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();
                }
        }
  1. 首先看题目要求第一点,定义一个图书馆接口,接口是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法,实验我们先定义出图书馆接口,按照要求写出两个抽象方法borrow,revert。
  2. 然后看第二个要求,图书类,由于类中某些方法实现不确定,实验我们可以选择用abstract关键字来修饰图书馆类,然后按照要求定义出两个string类型的成员变量。
  3. 下一步使用构造方法初始化成员变量,题目要求通过形参,所以将String name;String publisher传入(String name,String p),因为形参与成员名字重名,实验这里用 this 来区分this.name=name;。
  4. 下一步设置gettor和settor方法用于获取和设置类中name变量的值;很简单,首先我们写出获取name的返回值类型为string方法,然后直接return就好了。
  5. 下一步settor方法设置那么值,直接传入name赋值,然后是重写Equals方法,要求是当且仅当书名(name)和出版社(publisher) 均相等时,即为同一本书。首先我们看到入参类型是Object类型,父类不能调用子类特有的属性或方法,需要向下转型并且由入参是Object类型,也就是说任何类型的参数都能进来,实验要先进行一个非空判断,然后进行if判断(instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例)传入参数是否是book类的实例,如果是的话,正常判断实例化对象的name与publisher是否相等,是则返回true否则返回Flase。
  6. 接下来是重写toString方法(toString()方法是在Object类里面的方法,它返回的是String型的数据:类名+@+哈希值的16进制形式,方法重写时注意返回值为string类型即可直接return"Book [书名:" + name + " , 出版社:" + publisher + " ]";
  7. 然后是3.馆藏图书类(CollectionBook),继承自Book类,实现Library接口,首先是继承自book类,使用 extends关键字表明继承关系,然后使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。当类实现接口的时候,类要实现接口中所有的方法
  8. 然后按照要求还是先声明变量,然后构造方法,按照要求初始化几个变量,使用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判断调用方法即可
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昰阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值