You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大学Java项目开发图书馆系统,应使用interface还是extends继承?

Java图书馆项目类关联方案

首先明确:继承/接口不是当前场景的首选

  • 继承(extends)仅适用于is-a的从属关系,比如「科幻图书是图书的一种」,才需要让科幻图书类继承Book。你当前定义的Book(图书)和LibMember(会员)是完全独立的两类业务实体,不存在从属关系,完全不需要使用继承。
  • 接口(interface)是用来定义统一行为规范的,不是用来做业务实体关联的,只有当多个类需要实现同一种可标准化的行为时,才需要用到接口。

推荐方案:使用组合(Composition)实现类关联

这是Java中类关联最常用的实现方式,比继承灵活度更高,适配你当前需求的实现逻辑如下:

  1. 先定义两个独立的实体类,无需继承任何父类:
    • Book类:存放ISBN、书名、作者、库存等图书相关属性,配套添加构造方法、getter、setter即可
    • LibMember类(注意遵循Java类名首字母大写规范,建议把原名libMember调整为此):存放会员ID、姓名、联系方式、已借图书列表等会员相关属性,配套添加构造方法、getter、setter即可
  2. 在业务主类LibrarySystem中通过组合关联上述两个实体:
    类内部定义两个集合属性,用来存储全量的图书和会员数据:
    private List<Book> bookList = new ArrayList<>();
    private List<LibMember> memberList = new ArrayList<>();
    
    你需要的新增、删除、借还书等操作,都封装为LibrarySystem的成员方法,直接操作上述两个集合即可,比如新增图书方法public void addBook(Book book)、删除会员方法public boolean removeMember(String memberId)、借还书方法public boolean borrowBook(String memberId, String isbn)等。
  3. 测试类LibraryMain的main方法中,只需要实例化LibrarySystem,再实例化对应的Book、LibMember对象,调用LibrarySystem的业务方法即可完成全流程测试。

接口的适用场景示例

如果你后续有标准化行为的需求,才需要用到接口,比如需要支持同时搜索图书和会员,就可以定义Searchable接口:

public interface Searchable {
    boolean matchKeyword(String keyword);
}

之后让Book和LibMember分别实现这个接口,Book的实现逻辑匹配书名/作者/ISBN,LibMember的实现逻辑匹配姓名/会员ID,这样LibrarySystem的搜索方法就可以统一处理两类数据,不用分别写两套搜索逻辑。

内容的提问来源于stack exchange,提问作者Luna Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:24:03