当前位置: 首页 > news >正文

Java接口(3)与图书管理系统

抽象类与接口的区别

1.抽象类包含普通类和抽象方法,子类可以直接调用普通类方法不用重写。接口包含抽象方法和全局变量。
2.抽象类有各种权限,接口只有pubilc。
3.子类使用抽象类用extend,使用接口用implement。
4.一个抽象类可以实现若干个接口,接口不能继承抽象类,但是接口可以继承多个接口
5.一个类只能继承一个抽象类,一个子类可以实现多个接口。

Object类

Object类没有父类,可以引用所有类的对象。
tostring和equal方法也可以通过Object来进行重写。
equal如果比较的是引用类型则比较的是地址

图书管理系统

我们需要实现一个程序输入姓名,身份,从而来管理图书。

Book类

package book;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 45
 * Date: 2025-03-05
 * Time: 15:03
 */
public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    public String getName() {
        return name;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((isBorrowed)==true ? "    已经被借出" : "    还没有被借出") +
               /* ", isBorrowed=" + isBorrowed +*/
                '}';
    }
}

对书的属性进行设置用封装的方法来封装成员变量,增强安全性,再添加get,set方法实现对成员变量的更改。

Booklist类

package book;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 45
 * Date: 2025-03-05
 * Time: 15:08
 */
public class BookList {
    public Book[] books = new Book[10];
    private int useSize;
    public BookList(){
        this.books[0] = new Book("三国演义","罗贯中",10,"小说");
        this.books[1] = new Book("西游记","吴承恩",23,"小说");
        this.books[2] = new Book("红楼梦","曹雪芹",41,"小说");
        this.useSize = 3;
    }
    public Book getbook(int pos){
        return books[pos];
    }
    public void setBooks(int pos,Book book){
        books[pos] = book;
    }
    public int getUseSize() {
        return useSize;
    }

    public void setUseSize(int useSize) {
        this.useSize = useSize;
    }
}

我们首先以数组的方式将对象存储起来,并提前存储三个对象,用usesize来记录当前书的数目,这十分关键,对数组下标访问提供了方向。同时设置了四个方法一方面是对书的,另一方面是对于UseSize的,因为封装了usesize,这不用多说,getbook和setbook方便后来进行添加和查找,可见方法的重要性。

User类

package user;

import book.BookList;
import operation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 45
 * Date: 2025-03-05
 * Time: 15:46
 */
public abstract class User {
    protected String name;
   public IOpearation[] iOpearations;
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    public void doOpeation(int choice, BookList bookList){
        iOpearations[choice].work(bookList);
    }
}


在刚开始时我们的思路就是有管理员和普通成员两种选择,两大对象都是使用者,肯定会有共性,为了代码的简洁,和对代码的复用,我们选择创造一个父类,而这个父类设置为抽象类,可以为程序加上一层检验,因为我们真正面向的对象是Normaluser和Adamnuser,所以为了防止我们实例化父类,所以设置为抽象类。

再来到类中,我们发现用protected来修饰了name,它不仅能在包中用还能在包外同一类中用,这一限制修饰符用的很好,我们知道不同的身份所拥有的功能也不一样,所以我们通过数组来存储功能,具体大小得看身份,这也正应对了身份不同功能不同。

doOpeation给方法提供了渠道,通过choice来选择功能,然后选择对应的重写方法。

相关文章:

  • Android 多用户相关
  • tcp/ip协议详细介绍,tcpip协议详细介绍
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例5: 搜索和过滤
  • DeepSeek精品课分享 清北
  • 《几何原本》命题I.15
  • YOLOv12改进之A2(区域注意力)
  • LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素
  • Kafka - 高吞吐量的七项核心设计解析
  • 全面复习回顾——C++语法篇2
  • Docker部署开源运维工具MyIP结合内网穿透远程在线网络诊断和监控
  • 【Unity Shader编程】之光照模型
  • 【1Panel】平替宝塔面板!1Panel面板香橙派部署结合内网穿透远程管理
  • 传统架构与集群架构搭建LAMP环境并部署WordPress服务
  • VsCode/Cursor workbench.desktop.main.js 的入口
  • L1-041 寻找250
  • 企业出海如何搭建架构才能让资金合规回流?
  • 第八章:未来展望 - 第二节 - Tailwind CSS 社区生态建设
  • uploadlabs通关思路
  • 最基于底层的运算符——位运算符
  • Web网页开发——水果忍者
  • 直播类网站开发/网络营销个人感悟小结
  • wordpress 精品主题/厦门百度seo公司
  • 网站建设总结和体会/推广手段和渠道有哪些
  • 企业公司网站制作建设/热门职业培训班
  • 个人网站的制作步骤/百度seo和sem
  • 杭州网站设计公司哪家好/纯注册app拉新平台