大学Java项目开发图书馆系统,应使用interface还是extends继承?
Java图书馆项目类关联方案
首先明确:继承/接口不是当前场景的首选
- 继承(
extends)仅适用于is-a的从属关系,比如「科幻图书是图书的一种」,才需要让科幻图书类继承Book。你当前定义的Book(图书)和LibMember(会员)是完全独立的两类业务实体,不存在从属关系,完全不需要使用继承。 - 接口(
interface)是用来定义统一行为规范的,不是用来做业务实体关联的,只有当多个类需要实现同一种可标准化的行为时,才需要用到接口。
推荐方案:使用组合(Composition)实现类关联
这是Java中类关联最常用的实现方式,比继承灵活度更高,适配你当前需求的实现逻辑如下:
- 先定义两个独立的实体类,无需继承任何父类:
Book类:存放ISBN、书名、作者、库存等图书相关属性,配套添加构造方法、getter、setter即可LibMember类(注意遵循Java类名首字母大写规范,建议把原名libMember调整为此):存放会员ID、姓名、联系方式、已借图书列表等会员相关属性,配套添加构造方法、getter、setter即可
- 在业务主类
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)等。 - 测试类
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
相关产品推荐
相关产品推荐

