如何通过继承实现LibraryMember借6本、Staff借12本的权限控制?
实现带借阅限制的图书馆用户继承结构
核心思路
通过抽象父类+子类继承的方式,将图书馆用户的通用属性与行为封装在父类中,子类根据自身角色重写借阅上限规则,既实现代码复用,又满足不同用户的差异化需求。
代码实现(以Java为例)
1. 抽象父类 LibraryUser
封装所有用户的通用属性(姓名、ID、已借阅数量)和行为(借阅、归还),通过抽象方法定义借阅上限的获取逻辑,交由子类实现:
public abstract class LibraryUser { private String name; private String userId; private int borrowedCount; public LibraryUser(String name, String userId) { this.name = name; this.userId = userId; this.borrowedCount = 0; } // 抽象方法:子类必须实现,返回当前用户类型的最大借阅数 public abstract int getMaxBorrowLimit(); // 借阅操作:检查是否达到上限,允许则增加已借数量 public boolean borrowItem() { if (borrowedCount < getMaxBorrowLimit()) { borrowedCount++; return true; } return false; } // 归还操作:减少已借数量 public void returnItem() { if (borrowedCount > 0) { borrowedCount--; } } // Getter方法 public String getName() { return name; } public String getUserId() { return userId; } public int getBorrowedCount() { return borrowedCount; } }
2. 普通会员子类 LibraryMember
继承父类,定义自身最大借阅数为6:
public class LibraryMember extends LibraryUser { private static final int MAX_BORROW_LIMIT = 6; public LibraryMember(String name, String userId) { super(name, userId); } @Override public int getMaxBorrowLimit() { return MAX_BORROW_LIMIT; } }
3. 员工子类 Staff
继承父类,定义自身最大借阅数为12:
public class Staff extends LibraryUser { private static final int MAX_BORROW_LIMIT = 12; public Staff(String name, String userId) { super(name, userId); } @Override public int getMaxBorrowLimit() { return MAX_BORROW_LIMIT; } }
使用示例
public class LibraryDemo { public static void main(String[] args) { LibraryMember member = new LibraryMember("张三", "M001"); // 尝试借阅7次,第7次会失败 for (int i = 0; i < 7; i++) { boolean success = member.borrowItem(); System.out.println("会员第" + (i+1) + "次借阅:" + (success ? "成功" : "失败,已达上限")); } Staff staff = new Staff("李四", "S001"); // 尝试借阅13次,第13次会失败 for (int i = 0; i < 13; i++) { boolean success = staff.borrowItem(); System.out.println("员工第" + (i+1) + "次借阅:" + (success ? "成功" : "失败,已达上限")); } } }
方案优势
- 遵循开闭原则:新增用户类型(如VIP会员)时,只需继承
LibraryUser并实现getMaxBorrowLimit,无需修改父类逻辑。 - 代码复用:通用的借阅、归还逻辑全部封装在父类,避免重复代码。
- 清晰体现继承关系:父类定义用户的通用特征,子类扩展差异化规则,符合面向对象设计思想。
内容的提问来源于stack exchange,提问作者user18625843
相关产品推荐
相关产品推荐

