Theo nghĩa rất hẹp, câu trả lời là "Có": giả sử rằng các lớp cơ sở hoặc giao diện của bạn được thiết kế cho một mục đích duy nhất, kế thừa cả hai sẽ tạo ra một lớp có nhiều trách nhiệm. Tuy nhiên, đó có phải là "một điều xấu" hay không phụ thuộc vào bản chất của các lớp hoặc giao diện mà bạn đang kế thừa.
Bạn có thể phân vùng các lớp và giao diện của mình thành hai nhóm chính - những nhóm giải quyết sự phức tạp thiết yếu của hệ thống của bạn và các nhóm giải quyết sự phức tạp tình cờ của nó. Nếu kế thừa từ nhiều hơn một "lớp phức tạp thiết yếu", thì đó là điều xấu; nếu bạn kế thừa từ một lớp "thiết yếu" và một hoặc nhiều lớp "tình cờ" thì không sao.
Ví dụ: trong hệ thống thanh toán, bạn có thể có các lớp để thể hiện hóa đơn và chu kỳ thanh toán (chúng giải quyết sự phức tạp cần thiết) và các lớp cho các đối tượng vẫn tồn tại (chúng giải quyết sự phức tạp ngẫu nhiên). Nếu bạn thừa hưởng như thế này
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
đó là xấu: bạn BillingCycleInvoice
có một trách nhiệm hỗn hợp vì nó liên quan đến sự phức tạp thiết yếu của hệ thống.
Mặt khác, nếu bạn thừa hưởng như thế này
class PersistentInvoice : public Invoice, public PersistentObject {
};
Lớp học của bạn vẫn ổn: về mặt kỹ thuật, nó phục vụ hai mối quan tâm cùng một lúc, nhưng vì chỉ một trong số đó là điều cần thiết, bạn có thể xóa bỏ việc thừa kế một điều tình cờ là "chi phí kinh doanh".