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

如何通过继承实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:05:52